这里我们要把别人当作一个线程。当每一个线程开启时,我们指定一个点,让他们同时到达并执行,所以使用CyclicBarrier设定一个障碍,并设置这个障碍的参数,指定规则由多少个线程同时到达才开启。不然就在此等待后面的线程。
代码演示
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit;
/**
* @author Mxhlin
* @Email [email protected]
* @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();
}
}