zoukankan      html  css  js  c++  java
  • Java多线程协作CountDownLatch,主线程等待子线程结束

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

    主要方法

     public CountDownLatch(int count);构造方法参数指定了计数的次数

     public void countDown(); countDown方法,当前线程调用此方法,则计数减一

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

    =========================================================================================================== 

      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();  
                    }  
                }  
            }  
              
               
        }
    
  • 相关阅读:
    LeetCode120 Triangle
    LeetCode119 Pascal's Triangle II
    LeetCode118 Pascal's Triangle
    LeetCode115 Distinct Subsequences
    LeetCode114 Flatten Binary Tree to Linked List
    LeetCode113 Path Sum II
    LeetCode112 Path Sum
    LeetCode111 Minimum Depth of Binary Tree
    Windows下搭建PHP开发环境-WEB服务器
    如何发布可用于azure的镜像文件
  • 原文地址:https://www.cnblogs.com/swbzmx/p/5991773.html
Copyright © 2011-2022 走看看