java多线程问题求助:wait()和notify()

shihengli2010 shihengli2010 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38612139

浅谈java多线程wait,notify

主要介绍了java多线程wait,notify,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编和大家一起来学习一下吧

weixin_38656989

一个理解wait()与notify()的例子

一个理解wait()与notify()的例子,让你更好理解.

lpylpylpylpylpy

如何在Java中正确使用 wait, notify 和 notifyAll

wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。   在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待消费(不为空)。相应的,消费者可以通知生产者可以开始生成更多的数据,因为当它消耗掉某些数据后缓冲区不再为满。   我们可以利用wait()来让一个线程在某些条件下暂停运行。例如,在生产者消费者模

weixin_38732315

Java wait和notify虚假唤醒原理

主要介绍了Java wait和notify虚假唤醒,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

weixin_38722193
评论 2
收藏 已收藏
分享
返回顶部
shihengli2010
Java SE 62,620 成员 307,251 内容