zoukankan      html  css  js  c++  java
  • Java多线程之CountDownLatch学习

    给出官网上的例子:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

    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()
    得到当前计数器的值。







  • 相关阅读:
    hosts 文件妙用
    asp.net 各种路径
    正则表达式
    int.Parse()、int.TryParse()和Convert.ToInt32()的区别
    总结.NET 中什么时候用 Static
    利用.net的内部机制在asp.net中实现身份验证
    server.transfer 用法
    sql server Datetime格式转换
    如果在代码中使用JS
    js 添加广告
  • 原文地址:https://www.cnblogs.com/wally/p/4477040.html
Copyright © 2011-2022 走看看