zoukankan      html  css  js  c++  java
  • CountDownLatch类的使用

    java.util.concurrent.CountDownLatch是一个并发构造,它允许多个线程等候特定的操作完成。

    CountDownLatch用一个数字初始化,通过调用countDown()方法来减低这个值。当一个线程调用await()方法后,它必须等候数值变成0以后才能往后继续执行。

    调用await()方法会阻塞线程,直到这个数值变为0.

    代码例子:

    package com.dufeng.testjava.countdownlatch;
    
    import java.util.concurrent.CountDownLatch;
    
    public class TestCountDownLatch {
        
        public static void main(String[] args) {
            CountDownLatch latch = new CountDownLatch(3);
            
            Waiter waiter = new Waiter(latch);
            Decrementer decrementer = new Decrementer(latch);
            
            new Thread(waiter).start();
            new Thread(decrementer).start();
            
            System.out.println("end");
        }
    
    }
    package com.dufeng.testjava.countdownlatch;
    
    import java.util.concurrent.CountDownLatch;
    
    public class Waiter implements Runnable {
        
        private CountDownLatch latch;
        
        public Waiter(CountDownLatch latch) {
            this.latch = latch;
        }
    
        @Override
        public void run() {
            try {
                latch.await();
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
            
            System.out.println("Waiter Released");
        }
    }
    package com.dufeng.testjava.countdownlatch;
    
    import java.util.concurrent.CountDownLatch;
    
    public class Decrementer implements Runnable {
    
        private CountDownLatch latch;
        
        public Decrementer(CountDownLatch latch) {
            this.latch = latch;
        }
        
        @Override
        public void run() {
            try {
                Thread.sleep(1000);
                latch.countDown();
                System.out.println(latch.getCount());
                
                Thread.sleep(1000);
                latch.countDown();
                System.out.println(latch.getCount());
                
                Thread.sleep(1000);
                latch.countDown();
                System.out.println(latch.getCount());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
    }

     执行结果:

    end
    2
    1
    0
    Waiter Released
  • 相关阅读:
    git命令大全
    servlet执行顺序
    github使用教程
    upun使用教程
    jsp标签之<%%>和<%!%>
    spring MVC 详细入门
    jquery之ajax之$.get方法的使用
    jquery之getJSON方法获取中文数据乱码解决方法
    eclipse隐藏菜单栏实现全部酷黑主题
    eclipse快捷键失效的解决办法
  • 原文地址:https://www.cnblogs.com/yandufeng/p/6374869.html
Copyright © 2011-2022 走看看