Java并发编程之常用的辅助类是什么

  介绍

这篇文章主要介绍了Java并发编程之常用的辅助类是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

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班长关门走人“);   }

运行结果截图

癑ava并发编程之常用的辅助类是什么"

这里每个人何时走并不知道,但是可以保证每次都是班长最后一个走。

1.4。原理总结

<强> CountDownLatch主要有两个方法,当一个或多个线程调用等待方法时,这些线程会被阻塞。

<强>其它线程调用倒计时方法将会使计数器减1(调用倒计时方法的线程不会阻塞)

<强>当计数器的值变为0时,因等待方法阻塞的线程会被唤醒,继续执行。

2. cyclicbarrier

2.1。CyclicBarrier简介

循环循环,屏障屏障。

从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。

<强>它的作用就是会让所有线程都等待完成后才会继续下一步行动。

Java并发编程之常用的辅助类是什么