我通过实现runnable
和覆盖实现了多线程run()
。我想暂停里面的线程run()
。
请帮我
我应该做什么void run(){ }
?
不知道更多细节很难说。但你的选择是:
Thread.sleep()
- 并且无条件的睡了一会儿
wait/notify
配对等待某个对象
阻塞数据结构,例如BlockingQueue
,当集合中出现某些内容时唤醒线程
Thread.join()
等待其他线程
Java 5 并发抽象,如,Semaphore
和许多其他CountDownLatch
CyclicBarrier
执行此操作的常用方法是调用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
有一些对象可供两段代码访问。如果使用可用对象来完成这项工作是有意义的,则不需要单独的对象。
您可能需要Object.wait()
then Object.notifyAll()
,但正确使用它是一件棘手的事情。阅读它。一个很好的来源是 Josh Bloch 的 Effective Java。