简要分析park和unpark原理,希望有人进来看看为什么

park 和 unpark

park和unpark是LockSupport里面的方法,park的中文翻译有停在这的意思,所以park方法的作用就是停下一个线程,而unpark就是唤醒线程。

特点

与Object的wait&notify相比

  • wait和notify相比必须配合Object Monitor一起使用,而park,unpark则不用
  • park&unpark是以线程为单位来阻塞和唤醒线程的,而notify只能随机唤醒一个,notifyAll只能唤醒所有,不怎么精确
  • park&unpark是可以先unpark的类似于先打个预防针,而wait&notify则不能

原理

每个线程都有自己的一个Parker对象(是由底层c++代码实现的),由三部分组成_counter , _coud , _mutex 。

其中我们重点关心的是_counter,其中只有两种值0,1。

看个例子:

Thread t1 = new Thread(new Runnable() {
   
            @Override
            public void run() {
   
                log.debug("开始");
                LockSupport.park();
                log.debug
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值