相关文章
1. 前置知识
1.1 为什么要使用LockSupport?
3种让线程等待唤醒的方法:
- 使用Object中的wait()方法让线程等待,使用Object中的notify方法唤醒线程
- 使用JUC包中Condition的await()方法让线程等待,使用signal()方法唤醒线程
- LockSupport类可以阻塞当前线程以及唤醒指定被阻塞的线程
1.2 Object类中wait( )和notify( )实现线程的等待唤醒
- wait和notify方法必须要在同步块或同步方法里且成对出现使用。 wait和notify方法两个都去掉同步代码块后看运行效果出现异常情况:
Exception in thread “A” Exception in thread “B”
java.lang.IllegalMonitorStateException - 先wait后notify才可以(如果先notify后wait会出现另一个线程一直处于等待状态)
- synchronized是关键字属于JVM层面。monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖monitor对象只能在同步块或方法中才能调用wait/notify等方法)