CountDownLatch和CyclicBarrier使用示例
2017-04-26 23:23
489 查看
示例一:CountDownLatch类
import java.util.concurrent.CountDownLatch;
public class UserCountDownLatch {
}
示例二:CyclicBarrier类
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class UserCyclicBarrier implements Runnable{
// 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();
}
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();
}
}
相关文章推荐
- 多线程CyclicBarrier与CountDownLatch使用示例
- 你真的理解CountDownLatch与CyclicBarrier使用场景吗?
- Java并发包中CyclicBarrier的工作原理、使用示例
- CountDownLatch和cyclicbarrier的使用
- Java并发编程学习笔记(一):CyclicBarrier的使用示例
- CountDownLatch和CyclicBarrier的使用和区别
- CountDownLatch,Semaphore,CyclicBarrier多线程工具类的使用
- CountDownLatch和CyclicBarrier的简单使用
- CountDownLatch、CyclicBarrier、Semaphore共同之处与区别以及各自使用场景
- CountDownLatch与CyclicBarrier的使用与区别
- CountDownLatch 和 CyclicBarrier 的使用场景
- CountDownLatch和CyclicBarrier使用及区别
- Java并发包中CyclicBarrier的工作原理、使用示例
- Java并发包中CyclicBarrier的工作原理、使用示例
- 线程同步之CyclicBarrier使用示例
- CyclicBarrier使用详解
- java线程:CyclicBarrier使用详解
- CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用