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();
}
}
- CountDownLatch和CyclicBarrier使用示例
- CyclicBarrier 和CountDownLatch使用详解
- Java CountDownLatch 和 CyclicBarrier 使用
- CountDownLatch和CyclicBarrier的使用和区别
- jdk的CountdownLatch和CyclicBarrier的使用
- CountDownLatch和CyclicBarrier使用及区别
- CountDownLatch和CyclicBarrier的简单使用
- CountDownLatch 和 CyclicBarrier 的使用场景
- Java CountDownLatch 和 CyclicBarrier
- CountDownLatch和CyclicBarrier介绍
- CyclicBarrier和CountDownLatch介绍
- CyclicBarrier和CountDownLatch区别
- CountDownLatch、CyclicBarrier和Semaphore
- CountDownLatch、CyclicBarrier和Semaphore
- CountDownLatch、CyclicBarrier和Semaphore
- CountDownLatch 和 CyclicBarrier
- CountDownLatch、CyclicBarrier和Semaphore
- CountDownLatch和CyclicBarrier介绍
- java中equals和‘==’的详解
- 今天,是伟大的一天 !
- [LeetCode]283. Move Zeroes
- Django_TemplateNotExist
- [代码片]同步锁内外判断
- CountDownLatch和CyclicBarrier使用示例
- 湖大C语言程序设计7
- mysql 常见分表方案
- CWnd直接派生的窗口下使用CToolBar笔记
- Redis之—— Spring4.0 注解Cache+Redis缓存
- linux内核笔记之时间管理(二) : 低精度timer
- linux 内核笔记之时间管理(三) : 高精度timer
- excel 数据处理
- POJ