park和unpark的使用,以及底层原理

#使用
1.暂停线程的运行
LockSupport.park()

2.恢复
LockSupport.unpark(暂停的线程对象)

#特点
1.unpark 可以在线程暂停前调用,也可以在线程暂停后调用,暂停后调用能恢复被park暂停的线程运行,暂停前调用unpark(线程对象A),接下来再在线程对象A中调用park,A会继续运行。

#原理
1.每个线程都有一个自己的Parker对象,对象里有三个东西mutex,cond,counter
2.调用park的时候,线程看一下counter是不是0,是0,就阻塞在cond里,并再赋值一下0给counter,
调用unpark,将counter赋值为1,并唤醒cond里的线程,然后再把counter置为0,线程恢复运行。
3.先调用unpark的情况,先置为1,调用park时,发现counter是1,不需要阻塞,继续运行,并把counter置为0.

#扩展
1.wait,notify,notifyAll 必须和锁配合使用,park和unpark不用。
2.park和unpark以线程为单位精准阻塞和唤醒线程,notify是随机唤醒一个线程,而notifyAll唤醒所有的等待线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值