package com.company.bingfa;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("MyRunnable");
}
}
class MyThread2 extends Thread{
private CyclicBarrier c;
MyThread2(CyclicBarrier c){
this.c = c;
}
@Override
public void run() {
System.out.println(getName()+"开始线程");
try {
sleep(2000);
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(getName()+"结束线程");
}
}
public class MyCyclicBarrier {
public static void main(String[] args) throws InterruptedException {
MyRunnable myRunnable = new MyRunnable();
CyclicBarrier c = new CyclicBarrier(3,myRunnable);
MyThread2 t1 = new MyThread2(c);
MyThread2 t2 = new MyThread2(c);
MyThread2 t3 = new MyThread2(c);
t1.start();
t2.start();
t3.start();
Thread.sleep(1000);
t1.interrupt();
MyThread2 t4 = new MyThread2(c);
t4.start();
System.out.println("主线程结束");
/*
Thread-0开始线程
Thread-1开始线程
Thread-2开始线程
主线程结束
Thread-3开始线程
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at com.company.bingfa.MyThread2.run(MyCyclicBarrier.java:26)
Thread-0结束线程
MyRunnable
Thread-1结束线程
Thread-2结束线程
Thread-3结束线程
*/
}
}