非被动等待线程

时间:2012-11-09 23:32:56

标签: java multithreading runnable

线程是否有可能在等待之前执行某些操作,我想要做的是我希望这个线程在等待自己之前wait()另一个线程,

它是一个分布式系统,包含客户端,事务管理器和锁定管理器,后两个驻留在中间件服务器上。锁管理器可以wait()事务管理器的一个线程,我希望这个线程能够wait()客户端线程,然后再等待它自己。

1 个答案:

答案 0 :(得分:2)

你不能“等待”另一个线程。如果你在一个对象上调用wait(),它所做的只是将当前线程发送到睡眠状态,直到它被通知(notify()notifyAll())或由于所谓的虚假唤醒。我建议阅读"Lesson: Concurrency" from the Java Tutorials。特别是关于guarded blocks的部分应该引起你的兴趣。

所以,如果你想告诉其他一些线程你将要开始等待一个对象,例如像这样

// We are somewhere, in some method ...
synchronized(someObj) {
    someObj.wait();
}

你必须实现某种观察者模式,其中可以注册其他对象。