zoukankan      html  css  js  c++  java
  • Java之CountDownLatch使用

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

    主要方法

     public CountDownLatch(int count);

     public void countDown();

     public void await() throws InterruptedException  

    构造方法参数指定了计数的次数

    countDown方法,当前线程调用此方法,则计数减一

    awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0

    例子

    Java代码 复制代码 收藏代码
    1. public class CountDownLatchDemo {  
    2.     final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    3.     public static void main(String[] args) throws InterruptedException {  
    4.         CountDownLatch latch=new CountDownLatch(2);//两个工人的协作  
    5.         Worker worker1=new Worker("zhang san", 5000, latch);  
    6.         Worker worker2=new Worker("li si", 8000, latch);  
    7.         worker1.start();//  
    8.         worker2.start();//  
    9.         latch.await();//等待所有工人完成工作  
    10.         System.out.println("all work done at "+sdf.format(new Date()));  
    11.     }  
    12.       
    13.       
    14.     static class Worker extends Thread{  
    15.         String workerName;   
    16.         int workTime;  
    17.         CountDownLatch latch;  
    18.         public Worker(String workerName ,int workTime ,CountDownLatch latch){  
    19.              this.workerName=workerName;  
    20.              this.workTime=workTime;  
    21.              this.latch=latch;  
    22.         }  
    23.         public void run(){  
    24.             System.out.println("Worker "+workerName+" do work begin at "+sdf.format(new Date()));  
    25.             doWork();//工作了  
    26.             System.out.println("Worker "+workerName+" do work complete at "+sdf.format(new Date()));  
    27.             latch.countDown();//工人完成工作,计数器减一  
    28.   
    29.         }  
    30.           
    31.         private void doWork(){  
    32.             try {  
    33.                 Thread.sleep(workTime);  
    34.             } catch (InterruptedException e) {  
    35.                 e.printStackTrace();  
    36.             }  
    37.         }  
    38.     }  
    39.       
    40.        
    41. }  
    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(){
        		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()));
        		latch.countDown();//工人完成工作,计数器减一
    
        	}
        	
        	private void doWork(){
        		try {
    				Thread.sleep(workTime);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
        	}
        }
        
         
    }
    

    输出:

    Worker zhang san do work begin at 2011-04-14 11:05:11 Worker li si do work begin at 2011-04-14 11:05:11 Worker zhang san do work complete at 2011-04-14 11:05:16 Worker li si do work complete at 2011-04-14 11:05:19 all work done at 2011-04-14 11:05:19

  • 相关阅读:
    Document
    JavaScript
    day6 双向循环及pass、break、continue的使用以及for循环
    day5 isinstance&代码块&分支&while循环
    day4:运算符
    day3:强制类型转换&自动类型转换&变量缓存机制
    day2:Number,tuple,str,list,set,dict
    day1:注释和变量
    线段树区间修改+查询区间和
    Prim/Kruskal求最小生成树
  • 原文地址:https://www.cnblogs.com/xuxiuxiu/p/7797853.html
Copyright © 2011-2022 走看看