先总结其关系
- 有synchronized的地方不一定有wait,notify
- 有wait,notify的地方必有synchronized.
主要解释第二条。
wait与notify方法在运行时分别要释放/获得锁,如果外面没有synchronized也就没有锁自然无法释放/获得会有错误。
如果不加synchronized在编译时可以通过,运行时却会报错
java.lang.IllegalMonitorStateException
验证代码如下
public class test3 {
public static void main(String[] args) {
try {
test3 test3 = new test3();
test3.xxxxx();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void xxxxx() throws InterruptedException {
Thread thread = new Thread(() -> {
System.out.println("ccccccc");
});
thread.start();
thread.wait();
}
}
运行结果: