-1

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

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

它工作得很好。我可以按 P 键更改暂停状态。但我正在寻找更好、更专业的解决方案。我知道可重入锁和条件。所以我可以在线程上使用它们。然后按下 P 将释放 singalAll() 方法。但由于我在这个线程中并不真正需要同步,它会大大降低我的应用程序的速度。那么解决这个问题的最好、最有效的方法是什么?也许使用同步块?

synchronized (new Object()) {

}

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

4

3 回答 3

1

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

  1. 在要暂停的线程中创建一个原子布尔标志。
  2. 设置标志后,线程应在锁定对象上调用 wait()
  3. 当您想取消暂停线程时,重置标志并在锁定对象上调用 notify()
于 2013-02-17T15:21:34.953 回答
0

使用像我不久前发布的PauseableThread来回答一个很像你的问题。

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

于 2013-02-17T16:09:04.243 回答
0

使用 wait() 和 notify()

Object waitLock = new Object();

//...


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


// wake up with

waitLock.notify();
于 2013-02-17T15:32:17.783 回答