2013-02-17 98 views
-1

那麼什麼是暫停一個線程的最佳方式?到目前爲止,我有這樣的事情:在線程的主循環中,第一行是:如何在java中暫停線程?

while (paused == true) { 
    Thread.sleep(refreshRate); 
} 

和它的作品perfercly。我可以按P鍵更改暫停狀態。但我在尋找更好,更專業的解決方案。我知道重入鎖和條件。所以我可以在線程中使用它們。然後提示P會釋放singalAll()方法。但是這會讓我的應用程序變慢,因爲我在這個線程中並不需要同步。那麼什麼是最好的,最有效的解決方法呢?也許使用同步塊?

synchronized (new Object()) { 

} 

然後只是代碼的一部分將被同步。或者,也許我應該使用信號量?

+0

Thread.sleep()有什麼問題?你是否想要tonleep,或者你是否想等待一個行動發生在那裏繼續? – AlexWien 2013-02-17 15:14:14

+0

等到行動發生,然後繼續是我想要的。 – user2080377 2013-02-17 15:28:43

回答

1

您應該使用等待/通知機制,如:

  1. 在線程創建一個原子布爾標誌被暫停。
  2. 當標誌被設置線程應該調用wait()的鎖定對象上
  3. 當你想取消暫停線程重置標誌,並調用notify()鎖定對象
0

使用wait( )和notify()

Object waitLock = new Object(); 

//... 


// waiter Thread 
synchronized (waitLock) { 
    waitLock.wait(); 
} 


// wake up with 

waitLock.notify(); 
0

使用PauseableThread像我貼在不久前在回答很像你的問題。

它使用ReadWriteLock s來實現,所以你沒有同步的開銷。