我需要知道 wait() 和 notification() 到底是如何工作的?我无法通过使用 wait() 和 notification() 来实现其工作。相反,如果我使用 while() 循环等待,它就会正常工作。怎么会这样呢?为什么我不能简单地使用 wait() 和 notification() ?
你读过的文档了吗wait http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#wait%28%29-notify http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#notify%28%29功能 ?
无论如何,为了实现等待通知机制的最佳方法,请使用类似的东西(基于这个网站 http://tutorials.jenkov.com/java-concurrency/thread-signaling.html) :
public class WaitNotifier {
private final Object monitoredObject = new Object();
private boolean wasSignalled = false;
/**
* waits till another thread has called doNotify (or if this thread was interrupted), or don't if was already
* notified before
*/
public void doWait() {
synchronized (monitoredObject) {
while (!wasSignalled) {
try {
monitoredObject.wait();
} catch (final InterruptedException e) {
break;
}
}
wasSignalled = false;
}
}
/**
* notifies the waiting thread . will notify it even if it's not waiting yet
*/
public void doNotify() {
synchronized (monitoredObject) {
wasSignalled = true;
monitoredObject.notify();
}
}
}
请注意,此类的每个实例只能使用一次,因此如果需要多次使用它,您可能需要更改它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)