Java LockSupport.park& LockSupport.unpack 为什么可以先unpark原理解析(图解,生动形象例子解释)

Java LockSupport.park& LockSupport.unpack 为什么可以先unpark原理解析(图解,生动形象例子解释)

本文出处:https://blog.csdn.net/qq_20156289/article/details/108097454
  • 每个线程都有自己的一个Park对象,由三个部分组成_count,_cond,和_mux打个比喻
    • 线程就像是一个程序员(这个程序员,有烟才会敲代码,没烟就睡觉)
    • _cond是程序员睡觉的地方(没有烟,程序员就不敲代码了,就会跑这里睡觉)
    • _counter是烟存放的地方(0表示没有烟了,1表示有烟)
    • _mutex 互斥锁
  • 现在列举不同状态这些变量的变化以及线程的运行状态
    • 正常线程没有执行过unpark(此时_counter=0,程序员嘴里叼着烟),park方法执行后,程序员会立刻将烟吸完然后去睡觉。
    • park堵塞中的线程(睡眠中的程序员),执行unpark之后,_counter设置为1,然后程序员醒来把新来的烟叼在嘴里继续工作(_counter设置0)
    • 正在抽烟敲代码的程序员(正常运行中的线程),执行unpark方法后,_counter设置为1,之后如果再执行park,程序员会立刻将手中的烟抽掉【程序员想休息了】,接着程序员发现_counter=1,然后拿着新烟(_counter设置为0)【程序员很无奈】,继续敲代码。
  • 通过上面三种状态大家应该能更深层次从原理上知道为什么可以提前unpark了把。(unpark提前多次不能重叠,与提前一次unpark结果一样)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值