`

JAVA并发应用程序的构件(二)

    博客分类:
  • JAVA
 
阅读更多

三、锁存器(闭锁)

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

主要方法

 public CountDownLatch(int count);

 public void countDown();

 public void await() throws InterruptedException
 

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

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

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

 

  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. }  

 

分享到:
评论

相关推荐

    Java理论与实践:并发在一定程度上使一切变得简单

    它们是许多多线程应用程序的基本构件的高性能实现,并经历了大量测试。util.concurrent是JSR 166的切入点,它将带来一组并发性的实用程序,这些实用程序将成为 JDK 1.5中的java.util.concurrent包,但您不必等到那时...

    java线程 线程学习资料 java线程教程

    我们还将研究更复杂的、使用线程的应用程序的基本构件— 如何在线程之间交换数据、如何控制 线程以及线程如何互相通信。 我应该学习这个教程吗? 本教程适用于拥有丰富 Java 语言应用知识,但又没有多少多线程或并发...

    java线程初解

    我们还将研究更复杂的、使用程的应用程序的基本构件 — 如何在线程之间交换数据、如何控制 程以及线程如何互相通信。 我应该学习这个教程吗? 本教程适用于拥有丰富Java 语言应用知识,但又没有多少多线程或并发性...

    java线程学习

    我们还将研究更复杂的、使用程的应用程序的基本构件 — 如何在线程之间交换数据、如何控制 程以及线程如何互相通信。 我应该学习这个教程吗? 本教程适用于拥有丰富Java 语言应用知识,但又没有多少多线程或并发性...

    JAVA线程简介(多线程)

    本教程研究了线程的基础知识 — 线程是什么、线程为什么有用以及怎么开始编写... <br>我们还将研究更复杂的、使用线程的应用程序的基本构件 — 如何在线程之间交换数据、如何控制线程以及线程如何互相通信。

    Java线程设计和设计模式(两本书pdf版本)

    我们还将研究更复杂的、使用线程的应用程序的基本构件 — 如何在线程之间交换数据、如何控制 线程以及线程如何互相通信。 我应该学习这个教程吗? 本教程适用于拥有丰富 Java 语言应用知识,但又没有多少多线程或...

    Java线程教程(详解java线程使用) pdf.rar

    还将研究更复杂的、使用线程的应用程序的基本构件——如何在线程之间交换数据、如何控制线程以及线程如何互相通信。 Java线程教程适用于拥有丰富 Java 语言应用知识,但又没有多少多线程或并发性经验的Java 程序员...

    《软件系统架构与开发环境》第二章源代码-by 南邮-陈杨

    从抽象到具体分三个层次介绍相关知识,第一层次为体系结构及其相关概念,第二层次为流行的体系结构(模型)及其构件(协议),第三层次为具体的中间件技术以及基于上述技术的系统开发方法。 内容丰富,详略得当。从...

    Fuxi语言集成化开发环境 v1.71

    Fuxi(伏羲)程序设计语言是一种面向对象的、并发的、函数型与逻辑型语言相结合的程序设计语言。Fuxi语言是一种C++风格的说明性语言,它继承了C++简洁的风格和说明性语言强大的表达能力,是继JAVA、C++之后推出的又一...

    Fuxi语言集成化开发环境1.63

    Fuxi(伏羲)程序设计语言是一种面向对象的、并发的、函数型与逻辑型语言相结合的程序设计语言。Fuxi语言是一种C++风格的说明性语言,它继承了C++简洁的风格和说明性语言强大的表达能力,是继JAVA、C++之后推出的又一...

    Fuxi语言集成化开发环境1.65

    Fuxi(伏羲)程序设计语言是一种面向对象的、并发的、函数型与逻辑型语言相结合的程序设计语言。Fuxi语言是一种C++风格的说明性语言,它继承了C++简洁的风格和说明性语言强大的表达能力,是继JAVA、C++之后推出的又一...

    Fuxi语言集成化开发环境v1.70

    Fuxi(伏羲)程序设计语言是一种面向对象的、并发的、函数型与逻辑型语言相结合的程序设计语言。Fuxi语言是一种C++风格的说明性语言,它继承了C++简洁的风格和说明性语言强大的表达能力,是继JAVA、C++之后推出的又一...

    2005-2009软件设计师历年真题

     4.3 掌握C程序设计语言,以及C++、Java、Visual、Basic、Visual C++中任一种程序设计语言,以便能指导程序员进行编程和测试,并进行必要的优化  4.4 系统测试  • 指导程序员进行模块测试,并进行验收  • 准备...

    asp.net知识库

    ASP.NET 2.0使用Web Part创建应用程序之二(共二) 体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 NET2.0系列介绍(一).NET 2.0 中Web 应用程序主题的切换 ASP.NET 2.0 中Web 应用程序主题的切换 2.0正式版中...

    编程新手真言......

    Scheme 程序语言介绍之一 248 与软工有关的哲学 辩证 251 富网页技术 251 形式维度 252 开源与开放 253 Core learning and min learing编程 253 与软工有关的哲学 联系 254 本地化和语言编码 254 学习与维度 255 跟...

Global site tag (gtag.js) - Google Analytics