模拟工作检查点java

时间:2010-11-18 14:04:13

标签: java multithreading grid distributed-computing

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

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

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

1 个答案:

答案 0 :(得分:0)

不知道你正在实施什么样的“网格计算”,你唯一的机会就是让“工人”方法意识到它的可中断性。基本上这就是中断通常在java中的工作方式。

正如您所看到的那样,stop()suspend()resume()已被弃用,因为它们可能会导致死锁。 Ť 现在只有中断线程的方法是使用Thread.interrupt()并让“worker”方法通过定期查询Thread.interrupted()来处理中断。

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

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

然而,这是一个非常复杂的领域,有很多书提供了很好的建议。 (我非常喜欢 Java Concurrency in Practice ,如果我没记错的话,那里有一个类似的例子。)