`
java--hhf
  • 浏览: 307719 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

并行中的顺序执行——CountDownLatch

阅读更多

    java.util.concurrent.CountDownLatch : 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。--《JDK API 1.6.0》

    换句话说,你可以并行的执行一段代码,并设置等待所有的线程都执行完的点,然后再一起开始执行

    举例说,五个个人一起(并行)包饺子,只有等所有的饺子都包好以后才一起下锅,得,就这个意思咯。

其API相对来说比较简单:

构造方法摘要
CountDownLatch(int count)
构造一个用给定计数初始化的 CountDownLatch
方法摘要
void await()
使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断
boolean await(long timeout, TimeUnit unit)
使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间。
void countDown()
递减锁存器的计数,如果计数到达零,则释放所有等待的线程。
long getCount()
返回当前计数。
String toString()
返回标识此锁存器及其状态的字符串。

 

从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

实例:

public class CountDownLatchDemo {
	final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static void main(String[] args) throws InterruptedException {
    	CountDownLatch latch=new CountDownLatch(2);//两个线程并行
    	Worker worker1=new Worker("zhang san", 5000, latch);
    	Worker worker2=new Worker("li si", 8000, latch);
    	worker1.start();//
    	worker2.start();//
    	latch.await();//等待所有工人完成工作点
        System.out.println("all work done at "+sdf.format(new Date()));
	}
        
    static class Worker extends Thread{
    	String workerName; 
    	int workTime;
    	CountDownLatch latch;
    	public Worker(String workerName ,int workTime ,CountDownLatch latch){
    		 this.workerName=workerName;
    		 this.workTime=workTime;
    		 this.latch=latch;
    	}
    	public void run(){
    		System.out.println("Worker "+workerName+" do work begin at "+sdf.format(new Date()));
    		doWork();//工作了
    		System.out.println("Worker "+workerName+" do work complete at "+sdf.format(new Date()));
    		latch.countDown();//工人完成工作,计数器减一

    	}
    	
    	private void doWork(){
    		try {
				Thread.sleep(workTime);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
    	}
    }
         
}

实例输出:

Worker zhang san do work begin at 2015-01-03 21:26:38
Worker li si do work begin at 2015-01-03 21:26:38
Worker zhang san do work complete at 2015-01-03 21:26:43
Worker li si do work complete at 2015-01-03 21:26:46
all work done at 2015-01-03 21:26:46

 

0
1
分享到:
评论

相关推荐

    多线程并行执行,汇总结果

    综上所述,多线程并行执行是提升程序性能的重要手段,而`CountDownLatch`和线程安全的数据结构则为在多线程环境中控制执行顺序和保证数据一致性提供了有力支持。理解并熟练运用这些工具和技术,对于开发高效、可靠的...

    让线程按顺序执行8种方法.doc

    本文将介绍让线程按顺序执行的8种方法,涉及到多线程中许多常用的方法,不止为了知道如何让线程按顺序运行,更是让读者对多线程的使用有更深刻的了解。 一、使用线程的join方法 join()是Thread的方法,作用是调用...

    SpringBoot CountDownLatch多任务并行处理的实现方法

    在这些任务中,每个任务都需要消耗一定的时间,如果我们使用顺序执行的方式,势必会导致系统性能下降,影响用户体验。 多任务并行处理的实现方法 使用 CountDownLatch 可以实现多任务并行处理。CountDownLatch ...

    多线程countDownLatch方法介绍

    3. 多线程并行计算:在并行计算场景中,可以利用CountDownLatch确保所有子任务执行完毕后,再进行结果的汇总或计算。 总之,CountDownLatch是Java多线程编程中的一个重要工具,通过它可以实现线程间的同步与协作,...

    利用 CountDownLatch 类实现线程同步

    在多线程编程中,确保一组操作按照特定的顺序或者所有操作都完成后再进行下一步是常见的需求。Java 提供了多种工具来实现这样的同步机制,其中之一便是 `CountDownLatch` 类。`CountDownLatch` 是一个计数器,可以...

    CountDownLatch和CyclicBarrier用法实例大全

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

    CountDownLatch练习

    这个工具在多线程环境下的并行处理和协调中扮演着关键角色。 **CountDownLatch是什么?** CountDownLatch是一个计数器,初始化时设置一个初始值。这个计数器可以被调用`countDown()`方法来递减,直到计数器变为零。...

    CountDownLatch学习用法

    CountDownLatch是Java并发...在上述的`CountDownLatchDemo`中,可能包含了创建多个线程,每个线程执行一部分任务,然后调用`countDown()`,最后主线程调用`await()`等待所有任务完成,展示了CountDownLatch的基本用法。

    java利用CountDownLatch实现并行计算

    本文将主要介绍 Java 中如何利用 CountDownLatch 实现并行计算,并提供了一个详细的示例代码。 一、什么是 CountDownLatch? CountDownLatch 是 Java 中的一个同步工具类,它可以帮助我们实现并行计算。...

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

    这种策略能够充分利用多核CPU的并行处理能力,同时通过CountDownLatch确保所有线程都完成工作后再进行事务提交,避免了数据不一致的问题。 总结来说,MyBatis结合多线程和CountDownLatch闭锁实现数据批量插入是一种...

    CountDownLatch Demo

    总之,CountDownLatch 是 Java 多线程编程中的一个强大工具,它允许我们灵活地控制线程间的同步,确保程序的正确执行顺序。通过熟练掌握 CountDownLatch,我们可以编写出更高效、更可靠的并发程序。

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

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴 java并发编程中CountDownLatch和CyclicBarrier是两个非常重要的线程控制和调度工具,经常被用于解决多线程程序设计中的线程等待问题。本文将对...

    并发编程之CountDownLatch

    CountDownLatch 的主要使用场景包括:实现最大程度的并行性、开始执行前等待 n 个线程完成各自任务、死锁检测等。在实际开发中,CountDownLatch 可以用来实现主线程和子线程之间的通信,例如主线程发送命令启动子...

    CountDownLatch详解.docx

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

    CountDownLatch同步工具类使用详解

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

    java使用CountDownLatch等待多线程全部执行完成

    Java 使用 CountDownLatch 等待多线程全部执行完成 CountDownLatch 是 Java 中的一个同步工具类,允许一个或多个线程等待其他线程完成操作。它的应用场景非常广泛,例如在处理大量数据时,可以使用多线程的方式处理...

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

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具,用于协调多个线程之间的交互。它们都属于java.util.concurrent包下的类,为多线程编程提供了强大的支持。 **CountDownLatch** 是一个...

    Java中CountDownLatch用法解析

    总结来说,`CountDownLatch`在Java并发编程中是一个强大的工具,它提供了一种方式来让一组线程等待其他线程完成任务,或者在一组线程全部到达某个点后才能继续执行。在上述代码中,它成功地模拟了一场多运动员的比赛...

    如何使用CountDownLatch同步java多线程

    CountDownLatch 是 Java 并发编程中的一种常用工具,用于控制多个线程的并发执行。它可以实现多个线程之间的同步操作,使得线程之间可以协调工作,避免了线程之间的互相干扰。 从上面的代码可以看出,作者使用 ...

    JAVA线程高级-线程按序交替执行

    然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程中被称为线程同步或线程协调。Java提供了一些高级特性来实现这样的需求,比如`Thread`类、`synchronized`关键字...

Global site tag (gtag.js) - Google Analytics