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

石家庄大型网站建设百度seo关键词外包

石家庄大型网站建设,百度seo关键词外包,周口做网站公司哪家好,直播app开发技术这篇文章主要讲解java中一个比较常用的同步工具类CountDownLatch,不管是在工作还是面试中都比较常见。我们将通过案例来进行讲解分析。 一、定义 CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执…

这篇文章主要讲解java中一个比较常用的同步工具类CountDownLatch,不管是在工作还是面试中都比较常见。我们将通过案例来进行讲解分析。

一、定义

CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程,而学生就好比是执行的线程。

注意:java中还有一个同步工具类叫做CyclicBarrier,他的作用和CountDownLatch类似。同样是等待其他线程都完成了,才可以进行下一步操作,我们再举一个例子,在打王者的时候,在开局前所有人都必须要加载到100%才可以进入。否则所有玩家都相互等待。

我们看一下区别:

CountDownLatch: 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。 CyclicBarrier : N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。关键点其实就在于那N个线程(1)CountDownLatch里面N个线程就是学生,学生做完了试卷就可以走了,不用等待其他的学生是否完成(2)CyclicBarrier 里面N个线程就是所有的游戏玩家,一个游戏玩家加载到100%还不可以,必须要等到其他的游戏玩家都加载到100%才可以开局

现在应该理解CountDownLatch的含义了吧,下面我们使用一个代码案例来解释。

二、使用

我们使用学生考试的案例来进行演示:

在上面,我们定义了一个CountDownLatch,并设置其值为2。有两个学生使用两个线程来表示,然后依次执行。最后老师线程(main线程)在学生线程都执行完了才可以执行。我们来运行一边看看结果。

现在我们应该能体会到其用法了吧。在上面我们的等待线程时老师(main线程)。

下面我们对这个countDownLatch分析一下。为什么具有上面的特点。

三、原理

在上面我们看到,CountDownLatch主要使用countDown方法进行减1操作,使用await方法进行等到操作。我们进入到源码中看看。本源码基于jdk1.8。特在此说明。

1、countDown原理

英语不好的人看起来真的是一脸懵逼,不过信号上面的英语还都是简单的英语,大致意思是这样的:CountDownLatch里面保存了一个count值,通过减1操作,直到为0时候,等待线程才可以执行。而且通过源码也可以看到这个countDown方法其实是通过sync调用releaseShared(1)来完成的。

OK。到了这一步我们可能会纳闷,sync是个什么鬼,releaseShared方法又是如何实现的。我们不妨接着看源码,在CountDownLatch的开头我们找到了答案,原来这个sync在这里定义了。

在这里我们发现继承了AbstractQueuedSynchronizer(AQS)。AQS的其中一个作用就是维护线程状态和获取释放锁。在这里也就是说CountDownLatch使用AQS机制维护锁状态。而releaseShared(1)方法就是释放了一个共享锁。

现在理解了吧,底层使用AQS机制调用releaseShared方法释放一个锁资源。那么等待的方法是如何实现的呢?

2、await原理

这俩方法都是让线程等待,第一个没有实现限制,第二个有时间限制,我们一个一个来看。

(1)await()

await()底层主要是acquireSharedInterruptibly方法实现的,继续跟进去看看。

这里面有两个if语句,首先第一个判断是否被中断,如果被中断了,那就抛出中断异常。然后判断当前是否还有线程未执行,如果有那就,那就执行doAcquireSharedInterruptibly方法继续等待。

上面函数的意思已经在注释里面了,下面我们就来看看这个doAcquireSharedInterruptibly是如何实现的。

这块的代码比较长,不过大致意思我可以描述一下,他会用一个一个的节点将线程串起来 等达到条件后再一个一个的唤醒。核心就是第三行的addWaiter函数。我们可以再跟进去看看吧。

你会发现这里面也使用了CAS机制。而且就是使用链表穿起来的。

(2) await(long timeout, TimeUnit unit)

这个方法的意思是等待指定的时间,如果还有线程没执行完,那就接着执行。就好比考完试了,还有同学没交试卷,此时因为到时间了。不管三七二十一也不管剩下的同学是否提交,直接就走了。其底层是通过Sync的tryAcquireSharedNanos方法实现的,我们接着进入到源码中看看。

在这里皮球又一次被踢走了,真正实现的其实就是doAcquireSharedNanos方法,tryAcquireShared方法主要是判断是否当前满足wait的条件。我们接着看。

上面的代码看似长,最核心的就是for循环里面的,最主要的意思就是如果当前还有线程未执行而且过了超时时间,那就直接执行等待线程就好了,不再等了。也就是我在指定的时间内你没执行完我等着你,要是超了这个时间点我就不管了。

对于CountDownLatch来说原理主要还是通过源码来认识。不过CountDownLatch看起来虽然很好用,也有很多不足之处,比如说CountDownLatch是一次性的 , 计数器的值只能在构造方法中初始化一次 , 之后没有任何机制再次对其设置值,当CountDownLatch使用完毕后 , 它不能再次被使用。

OK。对其介绍就先到这里吧。

http://www.khdw.cn/news/45762.html

相关文章:

  • 如何做网站流量报告seo网站优化报价
  • 网站后台管理系统功能河南新站关键词排名优化外包
  • seo关键词优化推广报价表seo中文含义是什么
  • 网站开发工程师应聘书范文700字全网网络营销
  • 跨境商城网站制作外包公司是什么意思
  • 什么平台可以做网站推广今日头条新闻最新
  • 禅城网站建设网站的推广平台有哪些
  • 做动画人设有哪些网站可以借鉴苏州网站关键字优化
  • 电商网站开发需求文档怎么在百度上设置自己的门店
  • 事业单位网站方案百度搜索
  • 装修设计平台有哪些seo 怎么做到百度首页
  • 做面食网站磁力搜索器下载
  • 34线城市做网站推广广告投放代理商加盟
  • 遂宁网站开发万能导航网
  • 网站建设的域名注册优化网站seo方案
  • 手机网站建设选 朗创营销百度电脑版下载官方
  • 如何用h5做网站网络舆情案例分析
  • 做家居建材出口网站有哪些黑马培训机构
  • 网站移动端是什么问题网站推广的渠道有哪些
  • 网站响应式图片切换代码怎么在百度制作自己的网站
  • 做编程网站产品营销推广策略
  • 如何申请一个网站seo综合查询平台
  • 用jsp做网站有什么好处培训机构还能开吗
  • 网站seo多少钱google官方版下载
  • 如何在百度上建立自己的网站seo优化方案总结
  • 自己怎样做海外网站株洲seo优化
  • 电子邮件怎么注册惠州seo网站排名
  • 网站统计访客数量怎么做seo石家庄
  • 学校网站类型关键字搜索
  • 小程序免费制作网站网店代运营和推广销售