通信的方式:
要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程的执行结果,等等。设计到线程之间相互通信,分为以下四类:
- 文件共享
- 网络共享
- 共享变量
- jdk提供的线程协调API
细分为:suspend/resume、wait/notify、park/unpark
文件共享
变量共享
线程协作-jdk api
API-被启用的suspend/resume
该api被启用的原因是,容易写出思索的代码。所以用wait/notify、park/unpark来代替。
suspend/resume死锁实例。
wait/notify机制
park/unpark机制
三种方法的优缺点
- suspend/resume:对调用有顺序要求,也要开发自己注意锁的释放。容易死锁和导致永久挂起。
- wait/notify:要求在同步关键字里面使用,免去了死锁的困扰,但是一定要先调用wait再调用notify。否则永久等待。
- park/unpark:没有顺序要求,但是park不会释放锁,所以在同步代码块中使用要注意释放锁。
伪唤醒: