illlegalstateexception是lock对象,对象头标示没有给获取;即00,01等标识没有改变;
public class test {
public class C{
int i = 1;
}
public class A implements Runnable{
C lock;
public A(C lock){
this.lock = lock;
}
public void run(){
while(true){
synchronized(lock){
try {
if(lock.i%2==0)
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(lock.i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.i = 2;
lock.notify();
}
}
}
}
public class B implements Runnable{
C lock;
public B(C lock){
this.lock = lock;
}
public void run(){
while(true){
synchronized(lock){
try {
if(lock.i%2==1)
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(lock.i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.i = 1;
lock.notify();
}
}
}
}
public static void main(String[] args) throws ParseException {
C lock = new test().new C();
new Thread(new test().new A(lock)).start();
new Thread(new test().new B(lock)).start();
}
}