2013-06-27 43 views
-1

如何使用SemaphoreThread類中獲得join()的功能?如何更改加入信號量

我的意思是我想等待其他線程。

+0

你想看看join()做了什麼或者你想讓你的線程等待其他線程完成嗎? –

+0

@Kamen,我想停止線程,直到其他不會結束 –

+0

你有t1和t2。 t1應該等待t2完成。所以在t1應該等待的地方寫下t2.join()就是這樣。執行將停止在該行,直到t2完成。 –

回答

1

從你的問題我summise,你想要做什麼Thread.join()不使用Thread.join()但使用Semaphore。我可以考慮一些你可能想要這樣做的原因,但我覺得你可能只是想用join()。然而,在這裏。

讓我們先從什麼join()不 - 摘自的javadoc

Waits for this thread to die 

通過它我們可以假定它意味着停止運行。好的,我們需要的是一個Semaphore,有一個許可證,當線程死亡時釋放。讓我們假設你可以修改有問題的兩個線程,即它們不是最終的。然後,您可以重寫其run方法,使得第一版本中,當它完成的信號和信號量第二等待被釋放它即

final Semaphore sem = new Semaphore(1); 
Thread t1 = new MyThreadOne(){ 
    { 
    try{ 
     sem.acquire(); 
    } 
    catch(InterruptedException e){ log(...); } 
    } 
    @Override 
    public void run(){   
    super.run(); 
    sem.release(); 
    } 
}; 
Thread t2 new MyThreadTwo(){ 
    @Override 
    public void run(){ 
    try{ 
     sem.acquire(); 
    } 
    catch(InterruptedException e){ log(...); } 
    super.run(); 
    } 
}; 
t1.start(); 
t2.start(); 

你可能想通過信號開始到構造,如果之前你示例需要它,或者以其他方式訪問它。請注意0​​在這裏必須是final,因爲它在匿名內部類中被引用,並且Java不會正確執行閉包。