2010-11-18 22 views
0

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

为了保持简单的模拟,我只是将Job的变量值作为检查点状态。 我面临Job类设计的困境。由于suspend()和resume()方法现在已被弃用,我不希望CheckPointInterrupter在Job上使用它们。所以我寻找替代品,并发现http://www.java2s.com/Code/Java/Threads/Anotherwaytosuspendandresume.htm

如果这是要走的路,那么我不得不将检查点相关代码引入作业类。这不符合单一责任类的原则吗?另外,有人能够启发我在网格/分布式环境中工作的性质吗?这些工作会使自己成为“检查点”吗?任何意见/指向资源/谷歌搜索词将不胜感激。谢谢。

回答

0

不知道你正在执行什么样的“网格计算”,你唯一的机会是让“工作者”方法知道它是可中断的。基本上这是如何打断通常在java中工作。

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

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

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

但是,这是一个非常复杂的领域,并且有很多书籍给出了很好的建议。 (我非常喜欢Java并发实践,如果我没有记错的话,那里有一个类似的例子)。