2012-06-10 55 views
1

當線程正在做某些特定的事情時,是否可以暫停所有其他正在運行的線程?爲了使我的問題讓我們假設我有以下方法暫停其他線程,而線程正在做一定的tast?

public void doActions() 
{ 
    ...... 
    ...... 
    ...... 
    if(count == 30) 
    { 
    //This is where I want to pause all other running threads 

    } 
    ...... 
    ...... 
    ...... 
} 

問候!

+0

所有線程都一樣嗎?您可以使用信號量結構來允許一個線程輸入一個塊,然後關閉信號量以阻止其他線程進入相同的代碼塊。或者同樣使用一個同步塊。 http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html –

+6

不要求解決方案,而是描述您的目標。你很可能試圖以某種錯誤的方式解決問題。 – Lucero

+1

爲什麼你需要暫停其他線程 - 主要問題。基於此,我們可以給你我們的想法。 –

回答

0
  1. 您可以嘗試使用CountDownLatch,這將幫助你在你要訪問的資源很少的其他進程揭開序幕前的情景。

  2. 那麼你也可以嘗試用用旗語給到只有一個線程訪問在時間

    信號燈S =新的信號量(1);

0

我發佈了PauseableThread作爲最近另一個問題的可能解決方案。儘管它的工作原理與你想要的稍有不同(你需要一個線程來阻止其他線程,而其他一些線程可以阻止一個線程),把它變成你正在尋找的應該很簡單。

請注意,其他線程只會暫停在預定義的點上,它們不會停在原地。