CountDownLatch和CyclicBarrier使用示例

来源:互联网 发布:怎么找手机淘宝小二 编辑:程序博客网 时间:2024/06/06 09:06

示例一:CountDownLatch类
import java.util.concurrent.CountDownLatch;

public class UserCountDownLatch {

private CountDownLatch latch = new CountDownLatch(2);public void method1(){    try {        System.out.println("进入到method1。。");        System.out.println("method1等待。。");        latch.await();        System.out.println("继续运行到method1。。");    } catch (InterruptedException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }}public void method2(){        try {            System.out.println("进入到method2。。");            Thread.sleep(1000);            System.out.println("继续运行到method2。。");            System.out.println("通知method1继续运行。。");            latch.countDown();        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }public void method3(){    try {        System.out.println("进入到method3。。");        Thread.sleep(1000);        System.out.println("继续运行到method3。。");        System.out.println("通知method1继续运行。。");        latch.countDown();    } catch (InterruptedException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }}public static void main(String[] args) {    final UserCountDownLatch user = new UserCountDownLatch();    Thread t1 = new Thread(new Runnable() {        public void run() {            user.method1();        }    });    Thread t2 = new Thread(new Runnable() {                public void run() {                    user.method2();                }            });    Thread t3 = new Thread(new Runnable() {        public void run() {            user.method3();        }    });    t1.start();    t2.start();    t3.start();}

}

示例二:CyclicBarrier类
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class UserCyclicBarrier implements Runnable{

private CyclicBarrier barrier;private String str;public UserCyclicBarrier(CyclicBarrier barrier, String str){    this.barrier = barrier;    this.str = str;}public void run() {    try {        Thread.sleep(new Random().nextInt(5000));        System.out.println(str+"准备ok!");        //在这儿阻塞,一直等到最后一个线程也准备好了        barrier.await();    } catch (InterruptedException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (BrokenBarrierException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    //除非最后一个也准备好了,否则这句话刚开始是不会打印的    System.out.println(str+" go!");}public static void main(String[] args) {    CyclicBarrier barrier = new CyclicBarrier(3);

// ExecutorService executor = Executors.newFixedThreadPool(3);
// executor.submit(new Thread(new UserCyclicBarrier(barrier, “zhangsan”)));
// executor.submit(new Thread(new UserCyclicBarrier(barrier, “lisi”)));
// executor.submit(new Thread(new UserCyclicBarrier(barrier, “wangwu”)));
//
// executor.shutdown();
UserCyclicBarrier user1 = new UserCyclicBarrier(barrier, “zhangsan”);
UserCyclicBarrier user2 = new UserCyclicBarrier(barrier, “lisi”);
UserCyclicBarrier user3 = new UserCyclicBarrier(barrier, “wangwu”);
Thread t1 = new Thread(user1);
Thread t2 = new Thread(user2);
Thread t3 = new Thread(user3);
t1.start();
t2.start();
t3.start();

}

}

0 0
原创粉丝点击