`

CountDownLatch计数器实例

阅读更多
package concurrent.countDownLatch;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * 当调用 CountDownLatch的await方法时,所有线程阻塞
 * 当CountDownLatch不断调用countDown方法使计数器减为0时,所有线程被放行
 *
 */
public class CountdownLatchTest {

	public static void main(String[] args) {
		ExecutorService service = Executors.newCachedThreadPool();
		final CountDownLatch cdOrder = new CountDownLatch(1);
		final CountDownLatch cdAnswer = new CountDownLatch(3);		
		for(int i=0;i<3;i++){
			Runnable runnable = new Runnable(){
					public void run(){
					try {
						System.out.println("线程" + Thread.currentThread().getName() + 
								"正准备接受命令");						
						cdOrder.await();
						System.out.println("线程" + Thread.currentThread().getName() + 
						"已接受命令");								
						Thread.sleep((long)(Math.random()*10000));	
						System.out.println("线程" + Thread.currentThread().getName() + 
								"回应命令处理结果");						
						cdAnswer.countDown();						
					} catch (Exception e) {
						e.printStackTrace();
					}				
				}
			};
			service.execute(runnable);
		}		
		try {
			Thread.sleep((long)(Math.random()*10000));
		
			System.out.println("线程" + Thread.currentThread().getName() + 
					"即将发布命令");						
			cdOrder.countDown();//使计数器减1
			System.out.println("线程" + Thread.currentThread().getName() + 
			"已发送命令,正在等待结果");	
			cdAnswer.await();
			System.out.println("线程" + Thread.currentThread().getName() + 
			"已收到所有响应结果");	
		} catch (Exception e) {
			e.printStackTrace();
		}				
		service.shutdown();

	}
}

分享到:
评论

相关推荐

    CountDownLatch和CyclicBarrier用法实例大全

    CountDownLatch是一个计数器,初始化时设定一个计数值,线程在执行任务之前会调用`countDown()`方法来减小计数值,直到计数值为0,所有等待的线程才会被释放并继续执行。这在多线程环境中常用来确保所有线程都完成...

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

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

    多线程countDownLatch方法介绍

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

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

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

    CountDownLatch详解.docx

    在提供的示例代码中,我们创建了一个 CountDownLatch 实例,初始值为3,表示有3个工作线程需要完成任务。然后创建了2个等待线程,它们会在调用 `await()` 后进入等待状态。接着启动所有线程,工作线程在运行后调用 ...

    countdownlatch-example-sourcecode.zip

    - 在主程序中创建CountDownLatch实例并初始化,如`CountDownLatch latch = new CountDownLatch(n)`,其中n表示需要完成的任务数量。 - 启动n个线程执行各自的任务,每个任务完成后调用`countDown()`方法。 - 主线...

    Java中CountDownLatch用法解析

    在`CountDownLatch`实例化时,计数器设置为这个初始值。每当调用`countDown()`方法时,计数器就会减1。当计数器的值为0时,任何因调用`await()`而阻塞的线程都将被释放并继续执行。这使得`CountDownLatch`成为一个...

    CountDownLatch 和 CyclicBarrier 的运用(含AQS详解)

    1. **初始化:** 使用给定的计数值创建一个 CountDownLatch 实例。 2. **递减计数器:** 在需要完成的工作完成后,调用 `countDown()` 方法来递减计数器。 3. **等待:** 其他线程调用 `await()` 方法来等待计数器的...

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

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

    java并发编程专题(八)----(JUC)实例讲解CountDownLatch

    "java并发编程专题(八)----(JUC)实例讲解CountDownLatch" 本篇文章主要介绍了Java中的CountDownLatch类,作为Java并发编程专题(八)的一部分,通过实例讲解帮助读者理解和学习。下面是文章中的知识点总结: ...

    Java多线程编程之CountDownLatch同步工具使用实例

    程序创建了一个ExecutorService来管理线程池,然后创建了两个CountDownLatch实例:`cdOrder`和`cdAnswer`。`cdOrder`表示裁判发布的命令,计数器为1,意味着所有运动员必须等待裁判的命令才能开始。`cdAnswer`表示...

    27 倒数计时开始,三、二、一—CountDownLatch详解.pdf

    使用 CountDownLatch 需要创建一个实例并传入一个初始计数值,这个计数值表示需要等待的线程数量。然后,每个需要等待的线程在完成任务后调用 `countDown()` 方法,将计数值减一。主线程或其他需要等待的线程调用 `...

    java线程并发countdownlatch类使用示例

    `CountDownLatch`类的核心是一个计数器,它在构造时被初始化为一个非负整数。这个计数值被称为门限值(count),当这个计数值减至0时,所有等待在`await()`方法上的线程将被释放,可以继续执行。在计数器未达到0之前...

    java多线程编程实例_Source

    在Java中,线程是程序的执行流,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈和一部分堆内存。Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。实例中可能涵盖了这两种方式的使用,并通过...

    CountDownLatch实际应用

    - 在`MergeMisRpt`方法中,创建了一个`CountDownLatch`实例,其计数值等于`vTop`,即时间跨度。 - 使用一个`for`循环创建并启动了多个线程,每个线程负责获取特定日期的数据。 - 每个线程内部,在执行完数据获取...

    多线程编程实例教程(rar)

    为了解决这个问题,Java提供了多种同步机制,如synchronized关键字、Lock接口(包括ReentrantLock)、Semaphore信号量、CountDownLatch计数器等。这些工具能确保同一时间只有一个线程访问共享资源,避免数据不一致。...

    JAVA多线程的实例

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

    《Java多线程编程实例》随书源码

    - `CountDownLatch`:用于协调多个线程,直到计数器归零时,所有线程才能继续执行。 - `CyclicBarrier`:允许多个线程等待彼此到达某个屏障点,然后一起继续执行。 - `Semaphore`:信号量,控制同时访问特定资源...

    多线程计数实现多线程执行后再执行主线程

    每个子线程负责不同的任务(例如收集`JsonPlan`数据),并且它们都持有同一个`CountDownLatch`实例。 4. **等待所有子线程完成**: ```java latch.await(); ``` 调用`latch.await()`方法阻塞主线程,直到计数器...

    Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解

    CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。它可以让一个线程等待其他线程执行完毕后再执行。CountDownLatch类只提供了一个构造器:public CountDownLatch(int count),其中...

Global site tag (gtag.js) - Google Analytics