黑马程序员技术交流社区
标题:
求解同步代码块,等待唤醒机制问题
[打印本页]
作者:
SkyBlack
时间:
2016-7-10 23:49
标题:
求解同步代码块,等待唤醒机制问题
<p>class Print {
private int flag = 1;
public void print1() throws InterruptedException {
synchronized(this) {
if (flag != 1) {
this.wait();
}
System.out.print("黑");
System.out.print("马");
System.out.print("程");
System.out.print("序");
System.out.print("员");
System.out.println();
flag = 2;
this.notify();
}
}
public void print2() throws InterruptedException {
synchronized(this) {
if (flag != 2) {
this.wait();
}
System.out.print("传");
System.out.print("智");
System.out.print("播");
System.out.print("客");
System.out.println();
flag = 1;
this.notify();
}
}
}</p><p>
</p><p>为什么用类名.class锁会出错啊</p><p>错误如下:</p><p>java.lang.IllegalMonitorStateException
黑马程序员
at java.lang.Object.notify(Native Method)
at com.heima.test.Print.print2(Test_Wait.java:68)
at com.heima.test.Test_Wait$2.run(Test_Wait.java:26)
java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at com.heima.test.Print.print1(Test_Wait.java:53)
at com.heima.test.Test_Wait$1.run(Test_Wait.java:14)
java.lang.IllegalMonitorStateException传智播客</p>
复制代码
作者:
zhangwenjin
时间:
2016-7-10 23:53
我表示看不懂
作者:
SkyBlack
时间:
2016-7-11 10:55
zhangwenjin 发表于 2016-7-10 23:53
我表示看不懂
学到这就懂了,表示我知道原因了
作者:
Mr.Wu
时间:
2016-7-11 11:32
你这是用的this锁呀,假如是继承的Thread创建的多线程会产生多个对象。锁就会失效,建议使用实现Runnable接口时使用this锁
作者:
SkyBlack
时间:
2016-7-20 14:07
谢谢啦~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2