2013-02-17 70 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来实现,所以你没有同步的开销。