Java并发编程CyclicBarrier的使用

来源:互联网 发布:linux单用户模式怎么进 编辑:程序博客网 时间:2024/06/05 08:33
import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CyclicBarrierTest {    private static CyclicBarrier cyclicBarrier = new CyclicBarrier(3, new Runnable() {        @Override        public void run() {            System.out.println("大家都到达了宿舍楼下,一起出发吧。。。");        }    });    //或者private static CyclicBarrier cyclicBarrier = new CyclicBarrier(3);就沒有這一句:大家都到达了宿舍楼下,一起出发吧。。。    public static void main(String[] args) {        ExecutorService executor = Executors.newFixedThreadPool(3);        for (int i = 0; i < 3; i++) {            executor.execute(new WalkThread(cyclicBarrier, "同学" + i));        }        executor.shutdown();        System.out.println("这里会在shutdown之前执行");    }    /**     * 从宿舍到食堂线程     *     * @author LiuYi     *     */    static class WalkThread extends Thread {        private CyclicBarrier mCyclicBarrier;        private String name;        public WalkThread(CyclicBarrier cyclicBarrier, String name) {            this.mCyclicBarrier = cyclicBarrier;            this.name = name;        }        @Override        public void run() {            System.out.println(name + "开始从宿舍出发。。。");            try {                Thread.sleep(1000);                mCyclicBarrier.await();// 等待别同学                // 前往食堂                System.out.println(name + "开始从宿舍楼下出发。。。");                Thread.sleep(1000);                System.out.println(name + "达到食堂。。。");            } catch (Exception e) {                e.printStackTrace();            }        }    }}

运行结果:

同学0开始从宿舍出发。。。同学2开始从宿舍出发。。。同学1开始从宿舍出发。。。这里会在shutdown之前执行大家都到达了宿舍楼下,一起出发吧。。。同学1开始从宿舍楼下出发。。。同学2开始从宿舍楼下出发。。。同学0开始从宿舍楼下出发。。。同学0达到食堂。。。同学1达到食堂。。。同学2达到食堂。。。

阅读全文
0 0
原创粉丝点击