package demo;
public class Demo {
public static void main(String[] args) {
Q q = new Q();
new Producer(q,lock);
new Coustomer(q,lock);
}
}
class Q {
int i;
boolean flag = false;
public int get() {
return i;
}
public void put(int i) {
this.i = i;
}
}
class Producer implements Runnable {
Thread t;
Q q;
int n = 0;
public Producer(Q q,Object o) {
this.q = q;
lock = o;
t = new Thread(this, "producer");
t.start();
}
@Override
public void run() {
while (true) {
synchronized (q) {
if (q.flag) {
try {
System.out.println("coustomer wait....");
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
q.put(10);
System.out.println(Thread.currentThread().getName() + ":" + q.i);
q.flag = true;
notify();
}
}
}
}
class Coustomer implements Runnable {
Thread t;
Q q;
public Coustomer(Q q,Object o) {
lock = o;
this.q = q;
t = new Thread(this, "customer");
t.start();
}
public void run() {
while (true) {
synchronized (q) {
if (!q.flag) {
try {
System.out.println("coustomer wait....");
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
q.flag = false;
System.out.println(Thread.currentThread().getName() + ":" + q.i);
notify();
}
}
}
}
java 同步异常 报java.lang.IllegalMonitorStateException的异常,求大神帮忙解析。
答案:2 悬赏:50 手机版
解决时间 2021-02-09 03:15
- 提问者网友:兔牙战士
- 2021-02-08 22:56
最佳答案
- 五星知识达人网友:傲气稳了全场
- 2021-02-09 00:29
去掉notify();
因为当前线程不含有当前对象的锁资源的时候,调用obj.notify()方法
会出现异常,你试一下。
因为当前线程不含有当前对象的锁资源的时候,调用obj.notify()方法
会出现异常,你试一下。
全部回答
- 1楼网友:行路难
- 2021-02-09 01:34
没有这个方法,看看你的源码,是不是定义有问题,isloopback() z ,后面怎么会有一个z。。。。。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯