`
liuzhaomin
  • 浏览: 207328 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

CountDownLatch 2

阅读更多

 

 
package com.ls.java_concurrency.countdownlatch;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * Another typical usage would be to divide a problem into N parts,
 * describe each part with a Runnable that executes that portion and
 * counts down on the latch, and queue all the Runnables to an
 * Executor.  When all sub-parts are complete, the coordinating thread
 * will be able to pass through await. (When threads must repeatedly
 * count down in this way, instead use a CyclicBarrier.)
 * @author astute_sparrow
 * ------Driver------
 */
public class CountDownLatchAnotherDemo {
	
	public static void main(String[] args) throws InterruptedException {
		CountDownLatch doneSignal = new CountDownLatch(10);
		final BlockingQueue<Runnable> queue = new SynchronousQueue<Runnable>();
		final ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 600, 30,
				TimeUnit.SECONDS, queue, Executors.defaultThreadFactory(),
				new ThreadPoolExecutor.AbortPolicy());
		for(int i=0; i<20; i++)
			executor.execute(new WorkerRunnable(doneSignal, 1));
		System.out.println("Main Thread starts......");
		Thread.sleep(10000);
		doneSignal.await();
		System.out.println("All sub thread ends!!!");
	}
	
}

class WorkerRunnable implements Runnable {
	private final CountDownLatch doneSignal;
	private final int i;
	WorkerRunnable(CountDownLatch doneSignal, int i) {
		this.doneSignal = doneSignal;
		this.i = i;
	}

	public void run() {
		doWork(i);
		doneSignal.countDown();
	}
	
	void doWork(int i) {
		System.out.println("......doWork......" + Thread.currentThread());
	}
}
 

 

 

分享到:
评论

相关推荐

    多线程countDownLatch方法介绍

    2. 数据库连接池:数据库连接池在初始化时可能需要创建多个连接,完成后才允许客户端使用,CountDownLatch可以用来同步这一过程。 3. 多线程并行计算:在并行计算场景中,可以利用CountDownLatch确保所有子任务执行...

    CountDownLatch和CyclicBarrier用法实例大全

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

    利用 CountDownLatch 类实现线程同步

    2. **并发测试**:在测试中,可以创建多个线程模拟并发执行,然后使用 `CountDownLatch` 让测试代码等待所有并发操作完成,确保测试结果的正确性。 3. **框架设计**:在自定义框架或库中,如果有多个组件或服务需要...

    CountDownLatch学习用法

    2. **countDown()方法**:这个方法由那些执行任务的线程调用,每次调用都会使计数器减一。当计数器减到0时,表示所有任务已经完成。 ```java public void runTask() { try { // 执行任务 ... latch.countDown()...

    CountDownLatch练习

    2. **如何避免死锁与饥饿**:在使用CountDownLatch时,要确保所有线程都能正确调用`countDown()`,避免因某个线程异常而无法达到零导致死锁。 3. **如何选择合适的同步工具**:根据场景选择,如果需要所有线程执行完...

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

    2. 将数据分为多个批次,每个批次分配给一个线程处理。 3. 每个线程在开始执行前调用`latch.countDown()`,表示它已经准备好开始工作。 4. 线程执行数据插入操作,使用MyBatis的批处理功能提高效率。 5. 线程完成...

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    其中count是一个计数器中的初始化数字,比如初始化的数字是2,当一个线程里调用了countDown(),则这个计数器就减一,当线程调用了await(),则这个线程就等待这个计数器变为0,当这个计数器变为0时,这个线程继续自己...

    CountDownLatch的使用

    递减锁存器CountDownLatch的使用以及注意事项!

    并发编程之CountDownLatch

    CountDownLatch 并发编程 CountDownLatch 是一个同步的辅助类,它可以允许一个或多个线程等待,直到一组在其它线程中的操作执行完成。它通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了...

    CountDownLatch与thread.join()的区别

    CountDownLatch与thread.join()的区别

    CountDownLatch Demo

    2. **countDown() 方法**: 当一个线程完成其任务后,调用 `countDown()` 函数,计数器减一。若计数器未归零,则其他线程会阻塞等待。 3. **await() 方法**: 在主线程或其他需要等待的线程中调用 `await()`,该...

    CountDownLatch详解.docx

    CountDownLatch 是 Java 中的一个同步工具类,位于 `java.util.concurrent` 包下,它主要用于多线程间的协作,尤其在需要等待所有线程执行完指定任务后才能继续执行的情况。这个类通过一个计数器(计数down)来实现...

    countdownlatch-example-sourcecode.zip

    2. **CountDownLatch的构造与API** - `public CountDownLatch(int count)`: 构造一个CountDownLatch,参数count表示计数器的初始值。 - `public void await() throws InterruptedException`: 让当前线程等待,直到...

    java.并发工具类CountDownLatch.md

    ### CountDownLatch并发工具类详解 在Java并发编程中,`CountDownLatch`是一个非常实用的同步辅助类,它能够让一个或多个线程等待,直到其他线程执行完毕后再继续执行。该类位于`java.util.concurrent`包中,适用...

    Java中的CountDownLatch与CyclicBarrier:深入理解与应用实践

    在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...

    java.并发工具类CountDownLatch(处理方案示例).md

    2. 系统启动阶段,主线程需要等待多个组件初始化完成。 3. 测试环境模拟,主线程需要等待多个子线程完成特定的模拟工作。 使用CountDownLatch可以有效地解决多线程执行中的协作和同步问题,保证线程之间的顺序性和...

    并发工具类CountDownLatch(处理方案示例).md

    2. 在测试或模拟中模拟多线程环境下的同步问题,通过CountDownLatch控制线程同步点。 3. 在启动服务或应用时,确保所有必要组件都已经加载和准备就绪。 4. 在分阶段的任务中,每个阶段结束之后,主线程或其他线程...

    Java concurrency之CountDownLatch原理和示例_动力节点Java学院整理

    2. CyclicBarrier则可以重置,允许线程多次等待彼此,因此适合在循环中使用,如循环的阶段屏障。 CountDownLatch的常用方法包括: - `await()`: 使当前线程等待,直到计数器归零。如果计数器未归零,线程会被阻塞...

    JAVA多线程CountDownLatch使用详解

    JAVA多线程CountDownLatch使用详解 JAVA多线程CountDownLatch是JAVA多线程编程中的一种同步工具,主要用来让某个线程等待其他线程执行完毕后再继续执行。下面我们将详细介绍JAVA多线程CountDownLatch的使用和原理。...

    Java并发包之CountDownLatch用法.docx

    `CountDownLatch`是Java并发包`java.util.concurrent`中的一个重要工具类,用于实现线程间的同步。它基于计数器的概念,初始化时设置一个非负的计数值,然后通过调用`countDown()`方法来递减这个计数器。主线程或...

Global site tag (gtag.js) - Google Analytics