1

我通过实现runnable和覆盖实现了多线程run()。我想暂停里面的线程run()

请帮我

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

4

3 回答 3

3

不知道更多细节很难说。但你的选择是:

  • Thread.sleep()- 并且无条件的睡了一会儿

  • wait/notify配对等待某个对象

  • 阻塞数据结构,例如BlockingQueue,当集合中出现某些内容时唤醒线程

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

  • Java 5 并发抽象,如,Semaphore和许多其他CountDownLatchCyclicBarrier

于 2012-04-15T14:35:14.867 回答
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有一些对象可供两段代码访问。如果使用可用对象来完成这项工作是有意义的,则不需要单独的对象。

于 2012-04-15T14:34:57.377 回答
0

您可能需要Object.wait()then Object.notifyAll(),但正确使用它是一件棘手的事情。阅读它。一个很好的来源是 Josh Bloch 的 Effective Java。

于 2012-04-15T14:31:52.440 回答