Java多线程之CountDownLatch学习
2014-12-18 18:56
375 查看
给出官网上的例子:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html
Java中concurrent包中的CountDownLatch类说白了就是一个计数器,我们可以通过设置参数来进行计数,每次只能有一个线程去操作这个计数器,通过CountDown这个函数使得计数器的值减小,当计数器的值为0时,阻塞于await方法的线程才能得以执行。
例子:下面的程序中的主线程阻塞于await方法, 只有当5个线程都执行完了,主线程才能继续执行。
注:CountDownLatch类中有以下几个方法
Java中concurrent包中的CountDownLatch类说白了就是一个计数器,我们可以通过设置参数来进行计数,每次只能有一个线程去操作这个计数器,通过CountDown这个函数使得计数器的值减小,当计数器的值为0时,阻塞于await方法的线程才能得以执行。
例子:下面的程序中的主线程阻塞于await方法, 只有当5个线程都执行完了,主线程才能继续执行。
package com.test; import java.util.Random; import java.util.concurrent.CountDownLatch; public class CountDownLatchDemo { private static final int N = 5; private CountDownLatch waitCountDownLatch = null; public static void main(String[] args) throws InterruptedException { new CountDownLatchDemo(); } public CountDownLatchDemo() throws InterruptedException { waitCountDownLatch = new CountDownLatch(N); for (int i = 0; i < N; ++i) { new MyThread(i).start(); } waitCountDownLatch.await(); System.out.println("所有线程已经执行完成"); } class MyThread extends Thread { private int id; MyThread(int id) { this.id = id; } public void run() { try { System.out.println("线程 " + id + "正在执行" ); Thread.sleep(new Random().nextInt(2) * 1000); } catch (InterruptedException ex) { ex.printStackTrace(); } finally { waitCountDownLatch.countDown(); } } } }
注:CountDownLatch类中有以下几个方法
void await()等待,直到计数器中的值减为0。
boolean await(long timeout, TimeUnit unit)可以自己设置超时时间,一旦超过这个时间,await线程被唤醒,如果返回true,说明计数器为0,否则,不为0。
void countDown()使得计数器的值减1。
long getCount()得到当前计数器的值。
相关文章推荐
- Java多线程之CountDownLatch学习
- Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger
- Java多线程学习之 CountDownLatch 用法介绍
- Java 多线程协调工具 CyclicBarrier 与CountDownLatch 学习
- Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger
- java多线程学习-java.util.concurrent详解(一) Latch/Barrier
- Java5 多线程(六)--CountDownLatch 同步工具类
- Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例
- Java多线程之~~~使用CountDownLatch来同步多个线程实现一个任务
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- Java:多线程等待所有线程结束(CountDownLatch/CyclicBarrier)
- Java:多线程等待所有线程结束(CountDownLatch/CyclicBarrier) .
- 《Java 7 并发编程指南》学习概要 (3)Semaphore, CountDownLatch, CyclicBarrier , Phaser, Exchanger
- [转载]java多线程学习-java.util.concurrent详解(一) Latch/Barrier
- java多线程之CountDownLatch倒数闸门
- Java:多线程等待所有线程结束(CountDownLatch/CyclicBarrier)
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch(一)
- JAVA对多线程的两个有用的辅助类(CountDownLatch和AtomicBoolean)