线程暂停并在run()内恢复

时间:2012-04-15 14:27:22

标签: java

我通过实施runnable并覆盖run()来实现多线程。我想暂停run()内的线程。

请帮帮我

我应该在void run(){ }做什么?

3 个答案:

答案 0 :(得分:3)

在不了解更多细节的情况下很难分辨。但你的选择是:

  • Thread.sleep() - 无条件地睡了一会儿

  • wait/notify对等待某个对象

  • 阻止BlockingQueue之类的数据结构,当集合中出现某些内容时唤醒线程

  • Thread.join()等待其他线程

  • Java 5并发抽象,例如SemaphoreCountDownLatchCyclicBarrier以及许多其他

答案 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是一个很好的资源。

相关问题