我通过实施runnable
并覆盖run()
来实现多线程。我想暂停run()
内的线程。
请帮帮我
我应该在void run(){ }
做什么?
答案 0 :(得分:3)
在不了解更多细节的情况下很难分辨。但你的选择是:
Thread.sleep()
- 无条件地睡了一会儿
wait/notify
对等待某个对象
阻止BlockingQueue
之类的数据结构,当集合中出现某些内容时唤醒线程
Thread.join()
等待其他线程
Java 5并发抽象,例如Semaphore
,CountDownLatch
,CyclicBarrier
以及许多其他
答案 1 :(得分:2)
执行此操作的常用方法是在另一个线程可以通知的某个对象上调用wait
。这将是您的代码的模式:
public void run() {
. . .
// decide to suspend thread execution:
synchronized (LOCK) {
try {
LOCK.wait();
} catch (InterruptedException e) {
// thread was interrupted -- time to return?
}
}
// execution resumes here after interrupt or notify
}
然后其他一些线程执行此代码:
synchronized (LOCK) {
LOCK.notify(); // or notifyAll();
}
在这些代码片段中,LOCK
是两个代码片段都可以访问的对象。如果使用可用对象来完成工作是有意义的,则不需要单独的对象。
答案 2 :(得分:0)
您可能需要Object.wait()
然后Object.notifyAll()
,但正确使用它是一件棘手的事情。阅读它。 Josh Bloch的有效Java是一个很好的资源。