java多线程问题求助:wait()和notify()
public class Plate {
List<Object> eggs = new ArrayList<Object>();
class GetEgg extends Thread {
public GetEgg(String name){
super(name);
}
@Override
public void run() {
synchronized (eggs) {
while (eggs.size() == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
eggs.clear();
notifyAll();
System.out.println("拿到鸡蛋");
}
}
}
class PutEgg extends Thread {
public PutEgg(String name){
super(name);
}
public void run() {
synchronized (eggs) {
while (eggs.size() > 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
eggs.add(new Object());
notifyAll();
System.out.println("放入鸡蛋");
}
}
}
public static void main(String[] args) {
Plate plate = new Plate() ;
for(int i =0 ; i< 10 ; i++){
GetEgg g = plate.new GetEgg("getEgg"+i);
PutEgg p = plate.new PutEgg("petEgg"+i);
g.start();
p.start();
}
}
}上面代码:PutEgg 线程放鸡蛋,GetEgg 线程要取鸡蛋 ,报错:java.lang.IllegalMonitorStateException
找不到错误的原因,求帮助
...全文
相关推荐
Java多线程中wait、notify、notifyAll使用详解
主要介绍了Java多线程中wait、notify、notifyAll使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
浅谈java多线程wait,notify
主要介绍了java多线程wait,notify,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编和大家一起来学习一下吧
一个理解wait()与notify()的例子
一个理解wait()与notify()的例子,让你更好理解.
如何在Java中正确使用 wait, notify 和 notifyAll
wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待消费(不为空)。相应的,消费者可以通知生产者可以开始生成更多的数据,因为当它消耗掉某些数据后缓冲区不再为满。 我们可以利用wait()来让一个线程在某些条件下暂停运行。例如,在生产者消费者模
Java wait和notify虚假唤醒原理
主要介绍了Java wait和notify虚假唤醒,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


Java SE
