2012-04-15 61 views

回答

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是一些对象,它是对代码的两件访问。如果使用可用对象来完成工作是有意义的,则不需要单独的对象。

+0

太感谢你了,先生......这对我帮助很大。谢谢你这么多.. – 2012-04-15 16:13:23

0

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

3

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

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

  • wait/notify对等待某个对象

  • 阻止数据结构一样BlockingQueue上,唤醒线程的东西出现时在收集

  • Thread.join()要等一些其他线程

  • Java 5的并发抽象,如SemaphoreCountDownLatchCyclicBarrier和许多其他

相关问题