当前位置: 首页 > news >正文

情头定制网站网站设计目标 优帮云

情头定制网站,网站设计目标 优帮云,wordpress 火车头 教程,免费ppt模板下载爱ppt入理解CountDownLatch计数器 其他知识点 Java 多线程基础 深入理解aqs ReentrantLock用法详解 深入理解信号量Semaphore 深入理解并发三大特性 并发编程之深入理解CAS 深入理解CountDownLatch Java 线程池 使用用法 CountDownLatch用法详解 CountDownLatch实现原理 下面例子来…

入理解CountDownLatch计数器
其他知识点
Java 多线程基础
深入理解aqs
ReentrantLock用法详解
深入理解信号量Semaphore
深入理解并发三大特性
并发编程之深入理解CAS
深入理解CountDownLatch
Java 线程池

使用用法
CountDownLatch用法详解

CountDownLatch实现原理
下面例子来debug一下 走走流畅
 


   CountDownLatch countDown = new CountDownLatch(5);

        System.out.println(" 准备多线程处理任务 ");

        IntStream.rangeClosed(1, 6).forEach(x -> {
            new Thread(() -> {
                try {
                    Thread.sleep(100000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(" 线程开始 -----  " + Thread.currentThread().getName());
                countDown.countDown();
            }, x + "").start();

        });

        try {
            countDown.await();
//            可以设置等待时间
//            countDown.await(6, TimeUnit.MINUTES);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(" 准备多线程处理任务 结束 ");
        System.out.println(" ---------------------- ");
        System.out.println(" 结束 mian ---------- ");
 

使用 的时候,会在 countDown.await(); 进行阻塞,countDown.countDown();会去计数。

那内部原理是如何的呢?我们来debug一下

t0线程

默认是计数减1

在这里插入图片描述

tryReleaseShared 方法 

在这里插入图片描述

可以看到初始化state是 5 这里每个线程都是 -1 然后cas设置值 

在这里插入图片描述

剩下的t2 t3 t4 t5线程都是如此

最后我们来看 await 方法

 在这里插入图片描述

 

首先由于我们是main线程里await 其他线程是异步的 一定会在awite这里阻塞住,会进入到这里,判断state变量是否为 0

在这里插入图片描述

可以看到state为 0 就返回 1 否则就返回 -1
在这里插入图片描述 

然后 构建main线程节点 然后重试获取state 变量

 在这里插入图片描述

 

这里 shouldParkAfterFailedAcquire 方法设置node头节点 变量为 -1
再次循环返回true ,最后进入 parkAndCheckInterrupt() 方法 park main线程

知道所有线程执行完,进入 doReleaseShared() 方法 唤醒main线程在这里插入图片描述

可以看到头结点 下个node节点线程是main线程

 在这里插入图片描述

然后使用下面unpark 唤醒main线程

 在这里插入图片描述

最后

CountDownLatch实现原理 底层基于 AbstractQueuedSynchronizer 实现,CountDownLatch 构造函数中指定的 count直接赋给AQS的state;

 在这里插入图片描述

每次countDown()则都是release(1)减1,最后减到0时unpark阻 塞线程;

 在这里插入图片描述

这一步是由最后一个执行countdown方法的线程执行的。

而调用await()方法时,当前线程就会判断state属性是否为0,如果为0,则继续往下执 行,如果不为0,则使当前线程进入等待状态,直到某个线程将state属性置为0,其就会唤醒在 await()方法中等待的线程。

 doAcquireSharedInterruptibly里进行阻塞

 

CountDownLatch与Thread.join的区别
在没有 之前,我们可以使用 join 进行阻塞,等待其他线程完成操作。

CountDownLatch与Thread.join的区别

CountDownLatch的作用就是允许一个或多个线程等待其他线程完成操作,看起来 有点类似join() 方法,但其提供了比 join() 更加灵活的API。
CountDownLatch可以手动控制在n个线程里调用n次countDown()方法使计数器 进行减一操作,也可以在一个线程里调用n次执行减一操作。 join() 的实现原理是不停检查join线程是否存活,如果 join 线程存活则让当前线 程永远等待。
两者之间相对来说还是CountDownLatch使用起来较为灵活。

join方法在这里插入图片描述

http://www.yayakq.cn/news/206085/

相关文章:

  • 做贷款的网站有哪些网站开发是不是前端
  • wap网站开发培训网站设计的工作要求
  • 免费网站后台模板wordpress 消耗 资源
  • 那个网站教人做冰点重庆网
  • 奥派电子商务网站建设论文公司注册免费吗
  • 如何开通自己的网站网络网站如何推广
  • 一元购网站建设免费注册tk域名
  • 赤峰做网站的公司只会html wordpress
  • wordpress图片延迟大连seo排名外包
  • php网站开发入门到精通教程商务局网站群建设方案
  • 学校网站建设团队国际实时新闻最新消息
  • h5网站作用直播型网站开发
  • 网站留言板带后台模板网站更新维护
  • 建立网站一般多少钱群晖 nas做网站 推荐
  • 凡客建站手机版下载网站文章怎么做标签
  • 做婚恋网站代理商挣钱吗云南网站制作报价
  • 西安有哪些做网站建设的公司软文是什么意思
  • 石家庄企业建站广州建网站哪家最好
  • 电影网站怎么做不犯法摄影工作室网站设计
  • 教育网站制作运营wordpress底部跟随按钮怎么做
  • 网站开发需要的技术的流程深圳网站优化多少钱
  • 帝国cms 制作网站地图wordpress怎样排版
  • html5手机app网站模板品牌网站建设9小蝌蚪9a
  • 国外网站网页设计深圳专业网站建设产品运营之中的广度讲解
  • 衡水哪里做网站wordpress产品展示页面
  • 国家重大建设项目网站地址301网站重定向怎么做
  • 个人网站页面成都网络推广平台
  • 南宁企业网站设计公司网站开发人员离职后修改公司网站
  • 福田网站建设公司哪家性价比高网站建设的规划方案
  • 做安全题目是哪个网站大学生网站设计大作业