我有一個方法,它在概念上,看起來像:怎麼寫中斷的方法
Object f(Object o1) {
Object o2 = longProcess1(o1);
Object o3 = longProcess2(o2);
return longProcess3(o3);
}
凡過程本身也可能是化合物
Object longProcess1(Object o1) {
Object o2 = longSubProcess1(o1);
return longSubProcess2(o2);
}
如此反覆,用不同進程可能坐在不同的模塊中。大多數過程很長,因爲它們在計算上很昂貴,而不是IO限制。
到目前爲止好,但現在我想f
作爲一個整體是可以打斷的。 The recommended Java way to do that將定期檢查中斷標誌Thread.interrupted()
。這是非常簡單的,但如果我需要改變我的方法,像它可以迅速成爲累贅:現在
Object f(Object o1) {
Object o2 = longProcess1(o1);
if (Thread.interrupted()) throw new InterruptedException();
Object o3 = longProcess2(o2);
if (Thread.interrupted()) throw new InterruptedException();
return longProcess3(o3);
}
Object longProcess1(Object o1) {
Object o2 = longSubProcess1(o1);
if (Thread.interrupted()) throw new InterruptedException();
return longSubProcess2(o2);
}
...
,我明白了合理的那樣工作 - 它可以讓我更好的控制時, InterruptedException(例如)將拋出,避免將對象留在不一致的狀態 - 但我很想知道是否有更好的方法來做這個*。 *在Java中,不是AspectJ,我認爲這是非常合適的,但我堅持使用Java。
我會擔心與包含REF對方線程代碼死鎖。 – 2010-07-05 11:13:39