您的位置:首页 > 其它

CountDownLatch和CyclicBarrier使用示例

2017-04-26 23:23 489 查看
示例一: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();

}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: