Método de sincronización de subprocesos múltiples: el implementador definitivo [CyclicBarrierBegin]

package com.zcw.demo1;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * @ClassName : MyCyclicBarrierBeginDemo
 * @Description : 实验将要实现所有线程都达到同步点时再继续运行的效果
 * @Author : Zhaocunwei
 * @Date: 2020-04-18 09:35
 */
public class MyCyclicBarrierBeginDemo extends Thread{
    private CyclicBarrier cyclicBarrier;
    public MyCyclicBarrierBeginDemo(CyclicBarrier cyclicBarrier){
        super();
        this.cyclicBarrier = cyclicBarrier;
    }
    @Override
    public void run(){
        try {
            Thread.sleep((int)(Math.random()*1000));
            System.out.println(Thread.currentThread().getName()+"到了!"+System.currentTimeMillis());
            cyclicBarrier.await();
        } catch (InterruptedException | BrokenBarrierException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(5,new Runnable(){

            @Override
            public void run() {
                System.out.println("全都到了!");
            }
        });
        MyCyclicBarrierBeginDemo[] threadArray = new MyCyclicBarrierBeginDemo[5];
        for(int i=0;i<threadArray.length;i++){
            threadArray[i] = new MyCyclicBarrierBeginDemo(cyclicBarrier);
        }
        for(int i=0;i<threadArray.length;i++){
            threadArray[i].start();
        }
    }
}

Resultado de la operación:
Inserte la descripción de la imagen aquí

Publicado 478 artículos originales · elogiado 16 · 30,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_32370913/article/details/105593788
Recomendado
Clasificación