【问题标题】:simulating job checkpointing java模拟作业检查点java
【发布时间】:2010-11-18 14:04:12
【问题描述】:

我正在尝试在 java 中模拟网格计算的作业检查点。我有两个类 Job 和 CheckPointInterrupter 是线程。 CheckPointInterrupter 类定期获取作业的检查点。

为了简化模拟,我只是将 Job 的变量值作为检查点状态。 关于 Job 类的设计,我面临着两难境地。由于现在不推荐使用 suspend() 和 resume() 方法,因此我不希望 CheckPointInterrupter 在作业上使用它们。于是我寻找替代品,发现http://www.java2s.com/Code/Java/Threads/Anotherwaytosuspendandresume.htm

如果这是要走的路,那么我必须将检查点相关代码引入作业类。这不违反一个类具有单一责任的原则吗?另外,有人可以告诉我网格/分布式环境中工作的性质吗?这些工作会让自己成为“可检查点”吗?任何建议/指向资源/谷歌搜索词将不胜感激。谢谢。

【问题讨论】:

    标签: java multithreading grid distributed-computing


    【解决方案1】:

    在不知道您正在实施哪种“网格计算”的情况下,您唯一的机会是让“Worker”方法意识到它的可中断性。基本上这就是中断通常在java中的工作方式。

    如您所见,stop()suspend()resume() 已被弃用,因为它们可能导致死锁。 吨 他现在中断线程的唯一方法是使用Thread.interrupt() 并让“worker”方法通过定期查询Thread.interrupted() 来处理中断。

    另一种方法是实现一些其他协议来通知工作线程被暂停/恢复/无论如何,但关键是,工作方法必须意识到这一点。

    您是对的,这违反了单一关注原则,但实际上,您可以将几乎所有这些逻辑提取到专门为此设计的类中(例如,某种“SuspensionHandler”、“WorkContext”等)

    但是,这是一个非常复杂的领域,并且有很多书籍可以提供很好的建议。 (我非常喜欢Java Concurrency in Practice,如果我没记错的话,里面有一个类似的例子。

    【讨论】:

      猜你喜欢
      • 2017-02-18
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多