Java中常用的辅助类有哪些

  介绍

这篇文章将为大家详细讲解有关Java中常用的辅助类有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

癑ava中常用的辅助类有哪些"

<强>相关免费学习推荐: <强> 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班长关门走人“);   }}

运行结果截图
癑ava中常用的辅助类有哪些“
最后还有三个人被锁在教师了,这样可能会发生事故,所以肯定不行的。

我们要想实现这样的效果,就是等其它线程全部走完了,主线程才能运行。就需要借助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中常用的辅助类有哪些