如何在java中暂停线程?

时间:2013-02-17 15:11:03

标签: java

那么暂停线程的最佳方法是什么?到目前为止我有这样的事情:在线程的主循环中,第一行是:

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

它的工作原理很好。我可以按P键改变暂停状态。但我正在寻找更好,更专业的解决方案。我知道重入锁和条件。所以我可以在线程上使用它们。然后预测P将释放singalAll()方法。但是由于我在这个帖子中并不真正需要的同步,它会减慢我的应用程序。那么解决它的最佳,最佳方式是什么?也许使用同步块?

synchronized (new Object()) {

}

然后只是部分代码将被同步。或者也许我应该使用信号量?

3 个答案:

答案 0 :(得分:1)

您应该使用等待/通知方案,例如:

  1. 在要暂停的线程中创建一个原子布尔标志。
  2. 设置标志后,线程应调用锁定对象上的wait()
  3. 如果要取消暂停线程,请重置标志并在锁定对象上调用notify()

答案 1 :(得分:0)

使用wait()和notify()

Object waitLock = new Object();

//...


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


// wake up with

waitLock.notify();

答案 2 :(得分:0)

使用我之前发布的PauseableThread来回答与您类似的问题。

它使用ReadWriteLock来实现,因此您没有同步的开销。