这篇文章将为大家详细讲解有关Java中常用的辅助类有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>相关免费学习推荐:强> <强> Java基础教程强>
引用><强>常用的辅助类强>
<李>
1。李CountDownLatch
> <李>李>
<李>
<李>1.2.1 CountDownLatch概念
李> <李>到1.2.3 CountDownLatch的用法
李> <李>1.2。示例:班长锁门问题
李> <李>1.2.CountDownLatch类简介:
李> <李>李> <李>
1.3.CountDownLatch案例:
李> <李>1.4。原理总结
李>2。李CyclicBarrier
> <李>李>
<李>
<李>2.1.CyclicBarrier简介
李> <李>2.2。案例:集齐7颗龙珠召唤神龙
李>3。李Semophore
> <李>李>
<李>
3.1.Semophore简介
李> <李>3.2。抢车位问题
李> <李>3.3。原理总结
李><强> 1. countdownlatch 强>
<强> 1.2。示例:班长锁门问题强>
问题描述:假如有7个同学晚上上自习,钥匙在班长手上,并且要负责锁门。班长必须要等所有人都走光了,班长才能关灯锁的门。这6个同学的顺序是无序的,不知道它们是何时离开。6个同学各上各的自习,中间没有交互。假如说6个学生是普通线程,班长是主线程,如何让主线程要等一堆线程运行完了,主线程才能运行完成呢。
public class CountDownLatchDemo { public static  void main (String [], args), {//,TODO Auto-generated method 存根 (int i=1; i<=6;我+ +){ new 线程(()→{ System.out.println (Thread.currentThread () . getname () +“\ t离开教室“); },String.valueOf(我).start (); } System.out.println (Thread.currentThread () . getname () +“\ t班长关门走人“); }}运行结果截图
最后还有三个人被锁在教师了,这样可能会发生事故,所以肯定不行的。我们要想实现这样的效果,就是等其它线程全部走完了,主线程才能运行。就需要借助JUC中的CountDownLatch类
<强> 1.2.CountDownLatch类简介:强>
<强> 1.2.1 CountDownLatch概念强>
<强> CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。强>
<强> CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行强>。<强>使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务强>。
CountDownLatch说明:计数计数,向下倒计算,门闩开始
到<强> 1.2.3 CountDownLatch的用法强>
<强>某一线程在开始运行前等待n个线程执行完毕。将CountDownLatch的计数器初始化为新CountDownLatch (n),每当一个任务线程执行完毕,就将计数器减1 countdownLatch.countDown(),当计数器的值变为0时,在CountDownLatch上等待()的线程就会被唤醒。一个典型应用场景就是启动一个服务时,主线程需要等待多个组件加载完毕,之后再继续执行。强>
CountDownLatch底层构造函数源代码public CountDownLatch (int 计数),{ ,,,,,,,if (count & lt;, 0), throw new IllegalArgumentException (“count  & lt;, 0“); ,,,,,,,this.sync =, new 同步(数); ,,,}<强> 1.3。CountDownLatch案例:强>
public static void main (String [], args), throws InterruptedException {//6个同学正在上自习,每个人就有一个1计数器,走1个数字减1,主要线程启动,必须要等计时器从6变成0,才能开始。 CountDownLatch countDownLatch=new countDownLatch (6); (int i=1; i<=6;我+ +){ new 线程(()→{ System.out.println (Thread.currentThread () . getname () +“\ t离开教室“); countDownLatch.countDown ();//计算减少一个 },String.valueOf(我).start (); } countDownLatch.await ();//班长前面需要被阻塞 System.out.println (Thread.currentThread () . getname () +“\ t班长关门走人“); }Java中常用的辅助类有哪些