利用时间,迅速退还了以前欠下的债务。这是多线程第一阶段计划的最后一部分。随后的多线程将转移到修订阶段和 - 深度阶段。通过多线程线程。
当我说AQ时,我提到了这些类别。这些类别具有自己的某些特征,与特定场景一致。之前的生产非常舒适。
我们使用的并发工具有四种类型:
循环携带者:放学后一起散步
Countdownlatch:当某人在Qi中时触发
信号
交换器
功能:
它允许一组螺纹等待彼此,直到达到公共屏障点。目前,循环行动是有用的。因为释放等待线后可以重复使用屏障,因此称为屏障屏障。
内部原理:
内部使用锁锁重新进入和状态
构造函数:
使用变量:
用例 :
Gitee Cyclicbarrier
问题补充:
在完成其他线程执行的一组操作之前,它允许一个或多个线程等待
使用给定的计数初始化CountdownLatch.bavation countdown()方法,因此在当前计数达到零之前已阻止了等待方法这种现象仅出现一次,并且无法重置计数。如果您需要重置计数,请考虑使用cyclicbarrier。
CountDowLatch由计数器实现。当我们有一个倒计时对象时需要带上计数器值时,此值表示线程数。这意味着所有线程都完成了任务
参考
Gitee Countdownlaatch
总结
CountDowLatch是通过共享锁实现的。创建一个CountDowLatch实例时,需要传递INT类型的参数:计数,这是计数器的初始值,也可以理解为共享锁的总数。
当线程调用等待()方法时,程序首先确定计数的值是否为0,如果不是0,则它将等到0(ps:您可以调用等待多个线程))
当其他线程调用Countdown()方法时,执行共享锁状态,以使计数值-1(PS:Countdown不会阻止))
创建CountDownLatch时,必须使用原始计数参数来调用倒数方法以使计数器等于0,并且锁定将在继续运行之前释放。
基点
信号量信号量是控制对多个共享资源的访问的反击。像CountDownLatch一样,它本质上是一个“共享锁”。
从概念上讲,信号量保留许可证。如果有必要,您将在获得许可之前阻止每个acearire(),然后获得许可证。EAVERREAPERE()添加许可证,该许可证可能会释放一个晦涩的获胜者。
信号量通常用于限制可以访问某些资源(物理或逻辑)的线程数
当线程想要访问共享资源时,它必须首先获得信号量。当信号量> 0时,获取资源并制作信号量 - 1.如果信号量值= 0,则表示所有共享资源已被其他线程占用,线程必须等待其他线程发布资源。资源,信号量为+1
实施详细信息
信号量提供了两个构造函数:
Semaphore默认情况下选择了非锁定锁。
当信号量信号量= 1时,它可以用作相互锁定。在它们中,0和1等于其状态。当= 1时,可以获得其他线程。当= 0时,举起他,也就是说,其他线程必须等待。
可以在元素中间配对和交换的同步点
每个线程在交换方法的条目中呈现一种方法,匹配合作伙伴线程,并在返回时接收伙伴的合作伙伴。
Exchange,允许在任务之间交换数据:当两个线程达到同步点时,它们交换数据结构,因此第一个线程的数据结构进入第二个线程,第二个线程数据结构的数据结构进入第二个线程器的数据结构第一个线程
TODO:Exchange的源代码相对舍入,并且该组件中的使用情况不多,因此请先留下一个坑。之后,项目中确实有场景。
@ github.com/black-mt/case/tree/master/case%20module20thread/case%20thread_utils
//核心解释:
环舱是一堵墙,当所有线程时,人数都可以交叉在一起
CountDownLatch只是一个计数器,到达数字时可以执行该号码
//其他点:
循环携带者可以重置计数。CountDowlatch最终无法弥补最后一个板。让我们进行真正的多线程查看。
作者:安特布莱克