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

小程序推广代理商aso优化平台有哪些

小程序推广代理商,aso优化平台有哪些,网站首页404,网上购物网站开发入理解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.hkea.cn/news/213705/

相关文章:

  • 广告网站模板下载不了东莞排名优化团队
  • 网站建设人员培训纲要河北seo网络推广
  • jsp网站开发实例视频教程各大网站的网址
  • 手机网站设计要素推广竞价
  • 久久医药网seo推广培训费用
  • 网站做301顶级域名需要绑定网站排名掉了怎么恢复
  • wordpress app 源码合肥seo整站优化网站
  • 建立网站基本步骤安仁网络推广
  • 网页建设方案怎么写网站seo优化心得
  • 还没有做网站可以先备案域名吗seo怎么提升关键词的排名
  • 做网站原型图软件优化设计七年级下册语文答案
  • 2023年舆情分析报告seo优化宣传
  • 武汉网站建设 熊掌号最佳磁力引擎吧
  • 教育平台网站开发品牌运营
  • 91人才网赣州招聘网安卓优化大师app下载安装
  • 合肥网页模板建站营业推广策划
  • 网站做301根目录在哪教育培训机构平台
  • 企业做网站域名需要自己申请吗深圳百度推广客服电话多少
  • 备案网站容易被收录公司网站建设费用多少
  • 4s店网站建设方案百度app下载最新版
  • 创建电子商务网站的7个步骤做网站推广需要多少钱
  • DW怎么做电商网站梅花seo 快速排名软件
  • 哪个网站可以查企业信息今日热搜榜官网
  • 做网站有必要注册商标吗河北百度seo关键词
  • 网站更换服务器教程下载app到手机上并安装
  • 学校网站建设都是谁做的网络舆情分析
  • 怎么把现有网站开发php昆明seo排名外包
  • 网站桥页怎么找理发培训专业学校
  • 谷城网站开发百度导航官网
  • 做网站不优化平面设计网站