这里我们要把别人当作一个线程。当每一个线程开启时,我们指定一个点,让他们同时到达并执行,所以使用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();
}
}
执行效果
Original: https://www.cnblogs.com/xhlin/p/16746827.html
Author: 舍橘而取橙也
Title: 多线程案例 : 等待别人到达开饭
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/584976/
转载文章受原作者版权保护。转载请注明原作者出处!