通信的方式:
要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程的执行结果,等等。设计到线程之间相互通信,分为以下四类:

  1. 文件共享
  2. 网络共享
  3. 共享变量
  4. jdk提供的线程协调API
    细分为:suspend/resume、wait/notify、park/unpark

文件共享
网易云课堂学习-线程通信
变量共享
网易云课堂学习-线程通信
线程协作-jdk api
网易云课堂学习-线程通信
API-被启用的suspend/resume
网易云课堂学习-线程通信
该api被启用的原因是,容易写出思索的代码。所以用wait/notify、park/unpark来代替。
suspend/resume死锁实例。
网易云课堂学习-线程通信
wait/notify机制
网易云课堂学习-线程通信
park/unpark机制
网易云课堂学习-线程通信
三种方法的优缺点

  1. suspend/resume:对调用有顺序要求,也要开发自己注意锁的释放。容易死锁和导致永久挂起。
  2. wait/notify:要求在同步关键字里面使用,免去了死锁的困扰,但是一定要先调用wait再调用notify。否则永久等待。
  3. park/unpark:没有顺序要求,但是park不会释放锁,所以在同步代码块中使用要注意释放锁。

伪唤醒:
网易云课堂学习-线程通信

相关文章: