Document

多线程案例 : 等待别人到达开饭

这里我们要把别人当作一个线程。当每一个线程开启时,我们指定一个点,让他们同时到达并执行,所以使用CyclicBarrier设定一个障碍,并设置这个障碍的参数,指定规则由多少个线程同时到达才开启。不然就在此等待后面的线程。

代码演示

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

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/10/01/9:30
 * @Version
 * @Description 案例 全员到期开饭
 */
public class T5 {
    CyclicBarrier bar= new CyclicBarrier(3,()-> System.out.println("到齐了,开饭了"));
    void set(int e){
        System.out.println(Thread.currentThread().getName()+"开始动身(需要"+e+"秒)...");
        try {
            TimeUnit.SECONDS.sleep(e);
            System.out.println(Thread.currentThread().getName() + "到达");
            bar.await();
        } catch (InterruptedException ex) {
            throw new RuntimeException(ex);
        } catch (BrokenBarrierException ex) {
            throw new RuntimeException(ex);
        }
    }

    public static void main(String[] args) {
        T5 t5 = new T5();
        Random rand = new Random();
        new Thread(()->t5.set(rand.nextInt(5,20)),"李四").start();
        new Thread(()->t5.set(rand.nextInt(5,20)),"王五").start();
        new Thread(()->t5.set(rand.nextInt(5,20)),"李六").start();
    }
}

执行效果

在这里插入图片描述

posted @ 2022-10-01 09:49  一蓑烟雨任平生。。  阅读(41)  评论(0)    收藏  举报
Document