基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程
1 介绍
- LockSupport.park():暂停当前线程;
- LockSupport.unpark():恢复某个线程的运行;
注意:
- park之后的线程状态是WAITING状态;
- 可以提前unpark,要是执行到park时,发现提交提前被调用了unpark,就继续执行;
- 不必和Monitor配合使用;
2 原理
每个线程都会关联一个park对象(类似于每个对象都会关联一个Monitor)。
角色:_counter、_mutex、_cond。
调用park方法(counter = 0):
- 检查_counter,获得_mutex互斥锁;
- 线程进入_cond条件变量阻塞,设置_counter=0
调用unpark方法(counter = 1):
- 设置_counter =1;
- 唤醒_cond变量的线程;
- 线程恢复运行;
- 设置_counter=0