`

CountDownLatch例子2

 
阅读更多

 

 

 * 同步计数器 

 * 作用:同步N个线程执行

 * 1 一个问题分为N个部分一起执行,执行完毕然后汇总

 * @author root

 * 

 * 场景设想:

 *  有10个沙包,10个人来运送  

 *  当每人都运送完毕,则整个运送完毕

 

public class CountDownLatchTest2 {

	public static void main(String[] args) {
		 
		//所有线程执行完毕标识
		CountDownLatch allEndFlag = new CountDownLatch(10);
		
		try {
			for(int i=0;i<10;i++){
				Thread.sleep(500);//利用sleep,说明工人开始时间不同
				SlaveThread2 worker =  new SlaveThread2( allEndFlag,i);
				worker.start();
			}
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		
		try {
			allEndFlag.await();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} 
		 
		System.out.println("主任务完成。。");
	}
	
}


//工人类
class SlaveThread2  extends Thread{
	//工人编号
	private Integer number ; 

	//当前工人用力完毕 则减一
	private CountDownLatch allEndFlag;
	
	public SlaveThread2( CountDownLatch allEndFlag , int number){
		this.number = number ;
		this.allEndFlag = allEndFlag ; 
	}
	
	@Override
	public void run() {
		long start = System.currentTimeMillis() ; 
		System.out.println( "工人+"+number+"起止时间"+start);
		takeUp() ;
		//当前工人用力完毕,结束
		allEndFlag.countDown(); 
		System.out.println( "工人"+number+"完成");
	}
	
	//抬起
	public void takeUp(){
		try {
			//抬起箱子总共花费时间 3s
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

 

分享到:
评论

相关推荐

    CountDownLatch和CyclicBarrier用法实例大全

    - 使用CountDownLatch实现多线程并行计算,最后汇总结果的例子。 - 使用CyclicBarrier实现多线程分治策略,每个子任务完成后来一次全局计算的例子。 - 线程间的异常处理,包括中断和超时的处理。 - 结合Future和...

    利用 CountDownLatch 类实现线程同步

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

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

    在上面的例子中, CountDownLatch被用来模拟百米赛跑的场景,其中八名运动员同时起跑,由于速度的快慢,肯定会出现先到终点和晚到终点的情况,而终点有个统计成绩的仪器,当所有选手到达终点时,它会统计所有人的...

    CountDownLatch详解.docx

    这个例子展示了 CountDownLatch 如何帮助协调多线程间的同步。等待线程通过调用 `await()` 方法阻塞自己,直到所有工作线程完成它们的 `run()` 方法,调用 `countDown()`。一旦计数器达到0,所有等待的线程将被释放...

    Java并发包之CountDownLatch用法.docx

    在这个例子中,`CountDownLatchTest`的主方法创建了3个线程模拟3位乘客登机,`CountDownLatch`的计数器初始化为3。当所有乘客登机完成后,主线程会继续执行并宣布飞机起飞。 `CountDownLatch`在并行任务拆分和优化...

    CountDownLatch同步工具类使用详解

    在上面的例子中,我们使用CountDownLatch来控制线程的执行顺序,使得主线程等待代表选手的线程执行完成后再执行。我们可以看到,通过CountDownLatch的使用,我们控制了线程的执行顺序。在上面的代码中,我们使用到...

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

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

    Java中CountDownLatch用法解析

    在上述例子中,它被用来模拟一场有5位运动员的比赛,确保所有运动员都准备好后比赛才开始,并且所有运动员都完成比赛后比赛才结束。 首先,我们来看一下`CountDownLatch`的基本原理。构造`CountDownLatch`时需要...

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

    在上述的百米赛跑例子中,CountDownLatch被巧妙地应用了。`CountDownLatch(int count)`构造函数接收一个初始计数值,表示需要等待的线程数量。每个线程完成任务后,调用`countDown()`方法使计数值减一,直到计数值减...

    并发编程之Tools&CountDownLatch&Semaphore原理与应用1

    举个例子,假设我们有n个子线程需要完成任务,主线程可以使用CountDownLatch来等待所有子线程完成。当所有子线程调用`countDown()`后,主线程的`await()`方法将返回,表明所有子任务都已结束。 总结,Semaphore和...

    Java开发宝典的所有例子

    5. **多线程**:Java支持多线程编程,例子会介绍Thread类的使用、线程同步方法(如synchronized关键字、wait()、notify()等)以及并发工具类如Semaphore、CountDownLatch等。 6. **网络编程**:Java的Socket编程...

    Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用

    在`CountDownLatchDemo1`的例子中,展示了5个线程代表5个工人,每个工人完成检查后,`countDown()`会使计数器减1。主线程调用`await()`方法,直到计数器归零,表示所有检查都完成,然后继续执行后续任务。 **...

    Java中多线程同步类 CountDownLatch

    以下是一个简单的使用CountDownLatch的例子: ```java import java.util.concurrent.CountDownLatch; public class TestThread extends Thread { CountDownLatch cd; String threadName; public TestThread...

    Java线程并发工具类CountDownLatch原理及用法

    Thread t2 = new Thread(new WorkerThread(), "线程2"); Thread t3 = new Thread(new WorkerThread(), "线程3"); t1.start(); t2.start(); t3.start(); t1.join(); t2.join(); t3.join(); } } ``` 在这...

    java线程并发countdownlatch类使用示例

    这个例子展示了`CountDownLatch`如何协调多个线程的执行顺序,确保在所有预设任务完成后,主任务才能继续执行。在实际应用中,`CountDownLatch`常用于分布式系统、多线程协作、测试场景等,例如等待所有客户端连接...

    zookeeper-watcher- 简单例子

    2. **触发(Triggering)**:当所监听的数据节点发生变化时,服务器端将事件发送回客户端。 3. **处理(Processing)**:客户端接收到事件后,执行相应的回调函数进行处理。 **二、Watcher类型** Zookeeper中的...

    JAVA例子100

    2. **对象和类**:JAVA是面向对象的语言,所以例子可能涉及类的定义、对象的创建和销毁,以及封装、继承和多态三大面向对象特性。 3. **数组和集合**:包括一维和多维数组的使用,以及ArrayList、LinkedList、...

    java例子程序源代码

    线程和并发处理也是Java的强项,你可能会找到多线程创建(Thread类和Runnable接口)、同步机制(synchronized关键字、wait/notify、Lock接口)、并发工具类(如ExecutorService、Semaphore、CountDownLatch)的实例...

    java多线程并发编程例子

    5. **CountDownLatch**:`CountDownLatch`是一个计数器,通常用于让一个线程等待其他线程完成操作。计数器减到零时,所有等待的线程都可以继续执行。`TestCountDownLatch.java`可能展示了如何使用`CountDownLatch`来...

    详解Java多线程编程中CountDownLatch阻塞线程的方法

    举个例子,假设我们有5个子线程需要同时启动并执行一项工作,而主线程需要等待所有子线程工作完成后才继续执行。这时,我们可以在主线程中创建一个初始值为5的CountDownLatch,每个子线程执行完工作后调用`countDown...

Global site tag (gtag.js) - Google Analytics