public class Test implements Runnable {
Mysynchronized syn=null;
static Boolean b=true;
public Test(Mysynchronized syn) {
this.syn=syn;
}
public static void main(String[] args) {
Mysynchronized syn=new Mysynchronized();
new Thread(new Test(syn),"xx").start();
new Thread(new Test(syn),"yy").start();
}
@Override
public void run() {
while (true) {
synchronized (syn) {
System.out.println(Thread.currentThread().getName());
if(b){
b=false;
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.getMessage();
}
}else {
b=true;
notify();
}
}
}
}
}
运行结果如下:xx
Exception in thread "xx" Exception in thread "yy" yy
java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at the_eight_chapter.Test.run(Test.java:30)
at java.lang.Thread.run(Unknown Source)
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Unknown Source)
at the_eight_chapter.Test.run(Test.java:23)
at java.lang.Thread.run(Unknown Source)