CyblicBarrier使用之BrokenBarrierException

来源:互联网 发布:知乎盈利了吗 编辑:程序博客网 时间:2024/06/09 22:58

闲话少说,直接上demo.

package com.ilucky.test.jdk.util.concurrent;import java.util.Date;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * BrokenBarrierException * @author IluckySi * */public class CyclicBarrierTest2 {    public static void main(String[] args) {        CyclicBarrier cb = new CyclicBarrier(3);        new CyclicBarrierTestT21(cb).start();        new CyclicBarrierTestT22(cb).start();;        new CyclicBarrierTestT23(cb).start();    }}class CyclicBarrierTestT21 extends Thread {    private CyclicBarrier cb;    CyclicBarrierTestT21(CyclicBarrier cb) {        this.cb = cb;    }    public void run() {        try {            Thread.sleep(1000);            cb.await();        } catch (BrokenBarrierException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println(new Date() + "name =" + Thread.currentThread().getName());    }}class CyclicBarrierTestT22 extends Thread {    private CyclicBarrier cb;    CyclicBarrierTestT22(CyclicBarrier cb) {        this.cb = cb;    }    public void run() {        try {            Thread.sleep(2000);            // 中断当前线程, 会导致其他线程抛出BrokenBarrierException异常, 如果其他线程捕获了这个异常, 则会继续执行, 否则不会再继续执行.            Thread.currentThread().interrupt();            cb.await();        } catch (InterruptedException e) {            e.printStackTrace();        } catch (BrokenBarrierException e) {            e.printStackTrace();        }        System.out.println(new Date() + "name =" + Thread.currentThread().getName());    }}class CyclicBarrierTestT23 extends Thread {    private CyclicBarrier cb;    CyclicBarrierTestT23(CyclicBarrier cb) {        this.cb = cb;    }    public void run() {        try {            Thread.sleep(5000);            cb.await();        } catch (BrokenBarrierException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println(new Date() + "name =" + Thread.currentThread().getName());    }}/**java.util.concurrent.BrokenBarrierException    at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:243)    at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:355)    at com.ilucky.test.jdk.util.concurrent.CyclicBarrierTestT21.run(CyclicBarrierTest2.java:32)Fri May 12 10:24:53 GMT+08:00 2017name =Thread-0java.lang.InterruptedException    at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:204)    at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:355)    at com.ilucky.test.jdk.util.concurrent.CyclicBarrierTestT22.run(CyclicBarrierTest2.java:54)Fri May 12 10:24:53 GMT+08:00 2017name =Thread-1java.util.concurrent.BrokenBarrierException    at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:200)    at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:355)    at com.ilucky.test.jdk.util.concurrent.CyclicBarrierTestT23.run(CyclicBarrierTest2.java:75)Fri May 12 10:24:56 GMT+08:00 2017name =Thread-2*/
0 0
原创粉丝点击