java中wait、notify和notifyAll的概念用法和例子?

新手不必过认真研究,我只列马克-to-win了一个国外的经典例子, 有兴趣的可研究这三个方法仅在synchronized 方法中才能被调用。 wait()方法告知被调用的线程退出监视器马克-to-win并进入等待状态,直到其他线程进入相同的监视器并调用 notify( ) 方法。
notify( ) 方法通知同一对象上第一个调用 wait( )线程。
notifyAll() 方法通知调用 wait() 的所有线程,具有最高优先级的线程将先运行。
例1.11.1-本章源码
class Box {
private int content = -9999;
private boolean available;

public synchronized int getContent() {
while (available == false) {// no content to get
try {
/*
当执行下面的wait,这个线程将会暂停在这,然后当下列setContent执行notify,然后这个线程将从这继续执行。
*/
wait();
} catch (InterruptedException e) {
}
}
available = false;
/*
以下notify的功能是,如果生产者睡眠短(不是当前的情况),在这种情况下,生产者睡眠更长,时间是1000,setContent的等待将被执行,那么这个通知将被执行,如果客户睡眠时间更短,则下面的notify是无用的,因为没有人等候,但语法上写上它没关系。
*/
notify();
return content;
}

public synchronized void setContent(int i) {
while (available == true) {// no room for another integer
try {
/*。。。。。。。。。。。。。。。。。

详情请进:http://www.mark-to-win.com/index.html?content=JavaBeginner/javaUrl.html&chapter=JavaBeginner/JavaBeginner6_web.html#ConceptExampleOfwaitnotifynotifyAll

阅读更多

没有更多推荐了,返回首页