`

java CountDownLatch 实例

阅读更多

一个线程等待

 

CountDownLatch使用其await()等待其他线程完成(使用减值为0来判断是否完成)。

是一个线程等待多个线程(1-N)的锁工具。

 

以下为实例代码:

 

package com.common;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class CountdownLatchTest extends Thread {

	public final int countThd = 10;
	public CountDownLatch latch = new CountDownLatch(countThd);
	
	public static void main(String[] args)
	{
		CountdownLatchTest one = new CountdownLatchTest();
		one.start();
		System.out.println("^^^^^^^^mainmianmian^^^^^^^^^");
	}
	
	public void run()
	{
		synchronized (this) {
			try {
				System.out.println("GoGoGoGoGoGoGoTOWork");
				//Executor executor = Executors.newCachedThreadPool();
				for(int i=0;i<this.countThd;i++)
				{
					ChildrenThread childt = new ChildrenThread(this.latch,i);
					Thread each = new Thread(childt);
					each.start();
					//executor.execute(childt);
				}
				latch.await();
				System.out.println("GoGoGoGoGoGoGoHomeNow");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		//workForever();
	}
	public void workForever()
	{
		
		
	}
	
	class ChildrenThread implements Runnable
	{
		CountDownLatch latch;
		int num;
		public ChildrenThread(CountDownLatch latch,int num)
		{
			this.latch = latch;
			this.num = num;
		}

		@Override
		public void run() {
			// TODO Auto-generated method stub
			try {
				System.out.println("**********have a rest  "+num);
				Thread.sleep(1000);
				System.out.println("----------go back to work  "+num);
				latch.countDown();
				//CountdownLatchTest.this.latch.countDown();
				//System.out.println("%%%%%%%%%%I want to go home");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
}

 讲述的是一个实习小弟只能等其他员工都改完活才能回家的故事 ,Yes,he is me.

分享到:
评论

相关推荐

    CountDownLatch和CyclicBarrier用法实例大全

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...

    140个Java源码实例

    15. **并发编程**:Java提供了丰富的并发工具类,如CountDownLatch、CyclicBarrier、Semaphore等,实例将展示如何高效地管理并发任务。 通过逐一研究这些源码实例,不仅可以加深对Java语言的理解,还能提升实际编程...

    Java CountDownLatch完成异步回调实例详解

    Java CountDownLatch 完成异步回调实例详解 Java 中的 CountDownLatch 是一个同步辅助类,允许一个线程等待其他线程完成操作。它是一种非常有用的工具,用于在多线程环境中实现异步回调。在本文中,我们将学习如何...

    JAVA CountDownLatch(倒计时计数器)用法实例

    JAVA CountDownLatch(倒计时计数器)用法实例 在 Java 中,CountDownLatch 是一种同步工具,允许一个或多个线程等待其他线程完成任务。它是一种倒计时器,使用计数来控制线程的执行顺序。本文将详细介绍 ...

    Java中CountDownLatch用法解析

    在Java并发编程中,`CountDownLatch`是一个非常重要的工具类,它位于`java.util.concurrent`包下,用于协调多个线程间的同步。`CountDownLatch`的主要作用是允许一个或多个线程等待其他线程完成操作。在上述例子中,...

    JAVA多线程的实例

    Java并发包`java.util.concurrent`提供了高级并发工具,如`Semaphore`(信号量)、`CyclicBarrier`(回环栅栏)、`CountDownLatch`(计数器门闩)等,它们可以更灵活地控制线程执行。例如,`CountDownLatch`常用于...

    Java JDK 实例宝典 源代码

    10. **并发库**:Java提供了丰富的并发工具类,如ExecutorService、Semaphore、CountDownLatch等,实例会展示如何高效地管理线程池和控制并发。 11. **Java IO/NIO**:NIO(New Input/Output)是Java的非阻塞I/O...

    JAVA实例精通源代码

    6. **多线程**:Java提供了丰富的多线程支持,源码中会包含Thread、Runnable接口的使用,以及同步机制如synchronized关键字、wait/notify机制和并发工具类(如Semaphore、CountDownLatch等)的实例。 7. **网络编程...

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁)

    1. 创建一个CountDownLatch实例,初始化为线程数量。 2. 将数据分为多个批次,每个批次分配给一个线程处理。 3. 每个线程在开始执行前调用`latch.countDown()`,表示它已经准备好开始工作。 4. 线程执行数据插入操作...

    Java高级编程实例 100个

    本资源“Java高级编程实例 100个”提供了丰富的实践案例,旨在帮助初学者深入理解并熟练应用这些高级特性。 1. **多线程**:在Java中,多线程是并发执行任务的基本方式。学习如何创建Thread类的子类,使用Runnable...

    140个Java源码实例.zip

    15. **并发工具类**:Java并发包提供了一些实用工具,如ExecutorService、Semaphore、CountDownLatch等。实例可能包含如何有效管理并发任务的代码。 每个源码实例都对应一个特定主题,通过分析和实践这些例子,...

    java高级编程100实例

    10. **并发工具**:如CountDownLatch、CyclicBarrier、Semaphore等,这些工具可以帮助构建复杂的并发程序,实例可能展示如何有效使用它们。 11. **Java 8及以后的新特性**:如Lambda表达式、Stream API、Optional类...

    多线程countDownLatch方法介绍

    1. 初始化:通过`CountDownLatch(int count)`构造方法创建一个CountDownLatch实例,其中count参数表示计数器的初始值。 ```java CountDownLatch latch = new CountDownLatch(3); // 设置为3,表示有3个子任务 ``` 2....

    Java中CountDownLatch进行多线程同步详解及实例代码

    Java中CountDownLatch进行多线程同步详解及实例代码 CountDownLatch是Java中的一种多线程同步辅助类,主要用来同步多个任务的执行。它允许一个或多个线程等待,直到一组正在其他线程中执行的操作完成。下面是对...

    Java经典实例(第2版) pdf和源代码

    《Java经典实例(第2版)》是一本深入浅出的Java编程教程,它涵盖了Java语言的各个方面,旨在帮助读者掌握Java编程的核心技能,并通过实际的示例加深理解。PDF书籍部分提供了详尽的理论解释和清晰的代码展示,而源代码...

    java JDK 实例开发宝典 源代码

    Java JDK实例开发宝典源代码是一份非常宝贵的资源,它涵盖了Java开发中的各种核心概念和技术。JDK(Java Development Kit)是Java编程的基础,包含了Java运行环境、编译器、调试器以及各种工具,是每个Java开发者...

    java多线程编程实例_Source

    Java并发包提供了如CountDownLatch、CyclicBarrier、Semaphore等并发工具类,用于协调多个线程间的协作。这些工具在分布式计算、并行任务调度等领域有广泛应用。 通过这些实例,学习者能够深入理解Java多线程编程,...

    JAVA100例之实例64 JAVA线程间通讯

    在"JAVA100例之实例64 JAVA线程间通讯"这个主题中,我们将深入探讨Java中实现线程间通信的几种主要方法。 1. **共享数据**:最直观的线程间通信方式是通过共享内存空间,即共享变量。只要对共享变量的操作是线程...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    java代码实例项目

    这里可能需要用到Java的并发工具类,如CountDownLatch或者CyclicBarrier。 4. **利息计算**:根据银行的利率策略,定期计算并添加到账户余额中。这可能涉及到时间间隔的处理,可以使用Java的定时任务框架如...

Global site tag (gtag.js) - Google Analytics