java中的CountDownLatch
2016-06-30 09:50
351 查看
1.CoutDownnLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
主要方法:
public CountDownLatch(int count)
public void countDown()
public void await() throws InterruptedException
构造方法参数指定了计数的次数:
countDown方法,当前线程调用此方法,则计数减1
await 方法,调用此方法会一直阻塞当前线程,直到计时器的值为0
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch=new CountDownLatch(2);//两个工人的协作
Worker worker1=new Worker("zhang san", 5000, latch);
Worker worker2=new Worker("li si", 8000, latch);
worker1.start();//
worker2.start();//
latch.await();//等待所有工人完成工作
System.out.println("all work done at "+sdf.format(new Date()));
}
static class Worker extends Thread{
String workerName;
int workTime;
CountDownLatch latch;
public Worker(String workerName ,int workTime ,CountDownLatch latch){
this.workerName=workerName;
this.workTime=workTime;
this.latch=latch;
}
public void run(){
try{
System.out.println("Worker "+workerName+" do work begin at "+sdf.format(new Date()));
doWork();//工作了
System.out.println("Worker "+workerName+" do work complete at "+sdf.format(new Date()));
}finally{
latch.countDown();//工人完成工作,计数器减一
}
}
private void doWork(){
try {
Thread.sleep(workTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
主要方法:
public CountDownLatch(int count)
public void countDown()
public void await() throws InterruptedException
构造方法参数指定了计数的次数:
countDown方法,当前线程调用此方法,则计数减1
await 方法,调用此方法会一直阻塞当前线程,直到计时器的值为0
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch=new CountDownLatch(2);//两个工人的协作
Worker worker1=new Worker("zhang san", 5000, latch);
Worker worker2=new Worker("li si", 8000, latch);
worker1.start();//
worker2.start();//
latch.await();//等待所有工人完成工作
System.out.println("all work done at "+sdf.format(new Date()));
}
static class Worker extends Thread{
String workerName;
int workTime;
CountDownLatch latch;
public Worker(String workerName ,int workTime ,CountDownLatch latch){
this.workerName=workerName;
this.workTime=workTime;
this.latch=latch;
}
public void run(){
try{
System.out.println("Worker "+workerName+" do work begin at "+sdf.format(new Date()));
doWork();//工作了
System.out.println("Worker "+workerName+" do work complete at "+sdf.format(new Date()));
}finally{
latch.countDown();//工人完成工作,计数器减一
}
}
private void doWork(){
try {
Thread.sleep(workTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
相关文章推荐
- java虚拟机指令集
- maven web项目不能创建src/main/java等文件夹的问题
- Java.String.endsWith()
- 从eclipse导出 eclipse java formatter config file(eclipse code formatter插件配置文件)&&全屏有条线??
- Java之重写equals()和hashCode()
- spring mvc interceptor
- Java中Set,List,Map的区别
- java 获取当月第一天和最后一天 获取前一个月第一天和最后一天
- SpringMVC入门-第二节:配置
- Ehcache系列经典4
- Myeclipse 之“Cannot return from outside a function or method”
- Morris infix traverse for Binary tree using Java
- springmvc 带查询条件的分页,form的控制范围,怎么包裹条件提交给后台
- 为Maven手动添加Jar包
- spring 4 bean配置--注入属性配置细节(2)
- Java 线程池的原理与实现
- 有什么是超越MVC框架模式的
- Java导出数据为EXCEL的两种方式JXL和POI
- java优化技巧
- springmvc 怎么接收数组