2013-09-10 18 views
0

的情況是這樣的一個(看看下面EDIT2):併發技工特定情況

SITUATION

我有一個方法(方法A),將循環trught部件逐一,如果他們將其刪除滿足一個標準,這將觸發上述問題正在處理的事件(我的小方法鏈式反應)。

我有一個AtomicBoolean,當該鏈正在執行時它將爲true,當它完成或不執行時,哪個方法A可以訪問它將變爲false。

現在,我知道哪兒方法A將觸發事件(刪除對象時,它會觸發它),這樣我就可以在的AtomicBoolean從方法A.手動

現在我需要做的是設置爲true暫停該方法直到AtomicBoolean變爲false。

我不能使用的PropertyChangeListener,因爲我可以在方法的中間撲通,並用它來暫停它,我有我的方法向上突破至小的,這是我不能做,

如果鎖類是可以在這裏工作的,我不知道如何。

基本上,我需要這樣的:

while (AtomicBoolean) 
{ 
    Thread.sleep(0); 
} 

,但寫在一個更聰明的形式,所以它不會折磨處理器。

回答

2

Usa a CountDownLatchhttp://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html)並在您的檢查線程完成後觸發它。

線程1(做的工作):

CountDownLatch signal = new CountDownLatch(1); 
// ... 
signal.countDown(); 

線程2(等待另一個線程已經完成了它的工作):

//.. 
// await will block until the other thread triggers countDown 
signal.await(); 
//done 
+1

謝謝你,它的工作原理。 =) – Karlovsky120

+0

不客氣。 –