zoukankan      html  css  js  c++  java
  • 【Coucurrency-CountDownLatch】-20161203-0002

    简介

    java异步任务相关的工具。主要用在某些线程需要等到其他线程完成某些操作后才能执行的场景。

    等待线程需要显示的调用wait方法,表示线程当前挂起,需要等到countdownLatch到0才执行。另一些线程调用countDown对countDownLatch - 1,达到0时则调用wait方法的线程得到执行。

    小故事

    小明去吃铁板烧快餐,来到窗口后他发现都是旧菜但是他希望吃刚煮好的。经过交谈后师傅承诺之前的菜卖完就给他煮新的,这个时候小明就占据了这个窗口,其他窗口则继续卖菜。终于旧菜卖完了小明也拿到了新的菜,愉快的吃起了饭。
    这里窗口就是线程数,小明所在窗口需要其他窗口把旧菜卖完才能有新的菜,小明所在的线程是挂起的,其他窗口每卖一份就对这个菜减一。菜的量就是CountDownLatch。

    DEMO

    package calvin;
    
    import java.util.Random;
    import java.util.concurrent.CountDownLatch;
    
    public class TestCountDownLatch {
    	public static void main(String[] args){
    		CountDownLatch latch = new CountDownLatch(2);
    		Window win = null;
    		for(int i =0; i< 4; i ++){
    			win = new Window(latch);
    			new Thread(win).start();
    		}
    		System.out.println("wait");
    		try {
    			latch.await();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		System.out.println("down");
    	}
    	
    	public static class Window implements Runnable{
    		private CountDownLatch latch = null;
    		public Window(CountDownLatch latch){
    			this.latch = latch;
    		}
    		
    		@Override
    		public void run(){
    			int time = new Random().nextInt(5) * 1000;
    			try {
    				Thread.sleep(time);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			System.out.println("thread = " + Thread.currentThread().getName());
    			latch.countDown();
    		}
    	}
    }
    // 运行结果:
    wait
    thread = Thread-1
    thread = Thread-0
    down
    thread = Thread-3
    thread = Thread-2
    
    

    小结

    CountDonwLatch可以用作一个计数器。主要用在某个线程需要等待某个事件发生后才能被执行的地方。

  • 相关阅读:
    beta冲刺3/7
    案例分析
    beta冲刺2/7
    beta冲刺1/7
    烟头的待办项
    Spring框架原理概述
    Spring源码环境搭建
    BeanFactory的启动流程
    Spring容器的原理
    Spring Framework 概述
  • 原文地址:https://www.cnblogs.com/calvin-207/p/6130317.html
Copyright © 2011-2022 走看看