广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州Java同步器中的障碍器是什么?_北大青鸟IT学校

作者:邓华发布时间:2021-05-12分类:Java技术浏览:749


导读:相信学过Java的同学应该都知道Java同步器吧!那么问题来了,那么Java同步器中的障碍器是什么呢?接下来惠州北大青鸟老师给大家科普一下Java同步器中的障碍器是什么。

相信学过Java的同学应该都知道Java同步器吧!那么问题来了,那么Java同步器中的障碍器是什么呢?接下来惠州北大青鸟老师给大家科普一下Java同步器中的障碍器是什么。

屏障使一组线在屏障点汇合。

来自到达屏障的组的线程等待,直到该组中的所有线程到达。

一旦组中的最后一个线程到达屏障,组中的所有线程都将被释放。

当你有一个可以分成子任务的任务时,你可以使用一个屏障;每个子任务可以在单独的线程中执行,并且每个线程必须在共同点处相遇以组合它们的结果。

java.util.concurrent包中的CyclicBarrier类提供了屏障同步器的实现。

CyclicBarrier类可以通过调用其reset()方法来重用。

以下代码显示了如何在程序中使用循环障碍。

import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;class Worker extends Thread {  private CyclicBarrier barrier;  private int ID;  private static Random random = new Random();  public Worker(int ID, CyclicBarrier barrier) {
   this.ID = ID;
   this.barrier = barrier;
 }  public void run() {    try {      int workTime = random.nextInt(30) + 1;
     System.out.println("Thread #" + ID + " is going to work for " + workTime + "  seconds");
     Thread.sleep(workTime * 1000);
     System.out.println("Thread #" + ID + " is waiting at the barrier.");
     this.barrier.await();
     System.out.println("Thread #" + ID + " passed the barrier.");
   } catch (InterruptedException e) {
     e.printStackTrace();
   } catch (BrokenBarrierException e) {
     System.out.println("Barrier is broken.");
   }
 }

}public class Main {  public static void main(String[] args) {
   Runnable barrierAction = () -> System.out.println("We are ready.");
   CyclicBarrier barrier = new CyclicBarrier(3, barrierAction);    for (int i = 1; i <= 3; i++) {
     Worker t = new Worker(i, barrier);
     t.start();
   }
 }
}

上面的代码生成以下结果。

Java同步器中的障碍器.png

想了解更多关于Java的资讯吗?可以来惠州北大青鸟新方舟校区了解一下。

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表