`
zzhonghe
  • 浏览: 248165 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

多线程任务协作:CountDownLatch的使用

    博客分类:
  • Java
阅读更多
多线程任务协作中,如果有一个任务,需要在其他线程的任务完成以后才能执行的情况下,CountDownLatch就派上用场,它能使用很少的代码,省掉一堆wait和notify,帮你很放心的完成这种协作。

使用步骤:

1. 首先所有协作线程都引用同一个CountDownLatch
2. CountDownLatch初始化传入一个计数器
3. 最后执行的那个任务,需要调用CountDownLatch.await方法
4. 当CountDownLatch的计数器数值为0的时候,await的那个任务就能自动执行
5. 前面的多个任务,需要调用CountDownLatch.countDown来减少计数器的数目

   public static void testCountDown(){
        int size=10;
        final CountDownLatch latch=new CountDownLatch(size);
        final Random r=new Random(47);
        ExecutorService se=Executors.newCachedThreadPool();
        for(int i=0;i<size+10;i++){
            se.execute(new Runnable(){
                public void run() {
                    try {
                        TimeUnit.MILLISECONDS.sleep(r.nextInt(10)*1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("Preinitial--");
                    latch.countDown();

                }
            });
        }
        
        se.execute(new Runnable(){
            public void run() {
                try {
                    latch.await();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("Ready go!");
            }}
        );
    }
    
    public static void main(String args[]){
        testCountDown();
    }

分享到:
评论

相关推荐

    多线程countDownLatch方法介绍

    总之,CountDownLatch是Java多线程编程中的一个重要工具,通过它可以实现线程间的同步与协作,有效地解决了多线程环境下任务的同步问题。理解其工作原理和应用场景,能帮助开发者更好地设计和优化并发程序。

    Java_多线程编程线程:大总结

    - **新特征**:Java 5引入的并发工具,如`ConcurrentHashMap`、`CountDownLatch`、`CyclicBarrier`、`Semaphore`、`BlockingQueue`等,极大地简化了多线程编程的复杂度。 #### 五、Java线程的新特征详解 - **...

    学习多线程之一:线程通信--利用事件对象.zip_线程通信

    在多线程编程中,线程通信是一个至关重要的概念,特别是在并发执行任务时,确保不同线程间的协作和数据同步。本教程将聚焦于利用事件对象进行线程间的通信,这是实现多线程同步的一种常见方法。 事件对象,通常称为...

    Android多线程全新讲解.pdf

    这些实例可以帮助理解如何在实际的代码中实现多线程以及如何在多线程环境下进行有效的协作。 6. Android开发中的多线程:虽然文档标题提到了Android,但在提供的内容中并没有直接提及Android多线程的特殊性。不过,...

    CountDownLatch学习用法

    CountDownLatch通常用于多线程协作场景,例如启动一批任务,然后等待所有任务执行完毕后再进行下一步操作。 在CountDownLatch中,我们首先需要指定一个计数器,这个计数器表示需要完成的任务数量。每当一个线程完成...

    多线程demo程序-轻松掌握多线程技术

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在服务器端开发和高并发应用中,多线程能够充分利用CPU资源,提高程序的运行效率。这个名为"多线程demo程序-轻松掌握多线程技术"的项目,旨在帮助开发者理解...

    第20章 Part3 多线程互斥与协作.pdf

    ### 第20章 Part3:多线程互斥与协作 #### 一、互斥(Mutual Exclusion) 互斥是指在线程编程中确保多个线程不会同时访问同一资源的技术。这种技术非常重要,因为如果不加以控制,多个线程对共享资源的并发访问...

    专家级多线程技术

    1. 分布式系统:多台机器上的多线程协作,通过网络通信完成任务。如MapReduce模型,使用多线程处理海量数据。 2. 一致性哈希:在分布式系统中,用于负载均衡和数据分布,确保线程安全的数据访问。 以上只是专家级多...

    CountDownLatch Demo

    CountDownLatch 是 Java 多线程并发编程中一个重要的同步工具类,主要用来协调多个线程间的协作,确保某个任务在所有线程完成之前不会开始。在这个"CountDownLatch Demo"中,我们将深入理解 CountDownLatch 的原理、...

    多线程demo/java多线程练习

    - **CountDownLatch**:常用于多线程间的同步,计数器从正整数开始,每当一个线程完成任务,计数器减一,当计数器为零时,所有等待的线程将被释放。 - **CyclicBarrier**:允许一组线程等待彼此到达某个屏障点,...

    java多线程.

    3. **同步工具类**:`CountDownLatch`和`CyclicBarrier`等同步工具类可以帮助解决多线程之间的协作问题。 #### 六、总结 Java多线程技术是现代软件开发中不可或缺的一部分,掌握其原理和使用方法对于提高程序性能...

    多线程相关代码(V3)

    在Java编程中,多线程是并发执行任务的关键技术,它可以充分利用多核处理器的优势,提高程序的执行效率。本资源包含的"多线程相关代码(V3)"提供了关于多线程编程的一些示例,涵盖了Lock、synchronized、Join、...

    JAVA多线程总结

    Java 多线程是Java编程中的关键特性,它允许程序同时执行多个任务,提高系统的效率和响应性。本篇总结涵盖了Java多线程的基础概念、创建与启动、线程调度、同步与协作以及新特性。 **一、Java线程:概念与原理** 1...

    CountDownLatch和CyclicBarrier用法实例大全

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

    CountDownLatch详解.docx

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

    Java多线程运算集合

    - 多任务是指操作系统能够同时处理多个任务的能力,而多线程则是实现多任务的一种方式。 - 在Java中,线程的执行不是真正意义上的“同时”,而是通过时间片轮换来模拟多任务的执行。 - **Java中的线程**: - 在...

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

    在Java多线程编程中,CountDownLatch是一种常用的同步工具,用于协调多个线程之间的协作,确保它们按照特定的顺序执行或者等待所有线程完成特定任务后再继续执行。这个类是java.util.concurrent包的一部分,提供了...

    JAVA多线程教材

    5. **并发集合与并发工具类**:Java提供了一系列并发友好的集合,如ConcurrentHashMap、CopyOnWriteArrayList等,以及并发工具类如CountDownLatch、CyclicBarrier和Phaser,它们用于协调多线程间的协作。 6. **异常...

    java多线程编程实例_Source

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在本实例源码中,包含17个章节和上百个实例,旨在深入讲解Java多线程的核心概念和实际应用。 一、线程基础知识 在Java中,...

    java小程序中动画及音乐多线程的应用源码下载

    多线程允许应用程序同时执行多个任务,提高程序的并发性和效率。 1. **动画多线程**: - JavaFX和Swing都提供了内置的动画机制。例如,JavaFX的`Timeline`和`Transition`类可以用来创建各种动画效果。在多线程环境...

Global site tag (gtag.js) - Google Analytics