`
bdk82924
  • 浏览: 562917 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java CountDownLatch和CyclicBarrier 学习

 
阅读更多

CountDownLatch : 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。   CyclicBarrier        : N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。

 

 

 

CountDownLatch 是计数器, 线程完成一个就记一个, 就像 报数一样, 只不过是递减的.
而CyclicBarrier更像一个水闸, 线程执行就想水流, 在水闸处都会堵住, 等到水满(线程到齐)了, 才开始泄流.

 

 

/**  
 * Project Name:rop-client-P4Ux  
 * File Name:CyclicBarrierTest.java  
 * Package Name:com.zte.test  
 * Date:2015-4-15下午1:11:09  
 * Copyright (c) 2015,   All Rights Reserved.  
 *  
*/

package com.zte.test;

/**  
 * ClassName:CyclicBarrierTest <br/>  
 * Function: TODO ADD FUNCTION. <br/>  
 * Reason:   TODO ADD REASON. <br/>  
 * Date:     2015-4-15 下午1:11:09 <br/>  
 * @author    
 * @version    
 * @since    JDK 1.6  
 * @see        
 */
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CyclicBarrierTest
{
    public static void main(String[] args)
    {
        ExecutorService service = Executors.newCachedThreadPool();
        final CyclicBarrier cb = new CyclicBarrier(3); //三个线程同时到达
        for (int i = 0; i < 3; i++)
        {
            Runnable runnable = new Runnable()
            {
                public void run()
                {
                    try
                    {
                        Thread.sleep((long) (Math.random() * 10000));
                        System.out.println("线程" + Thread.currentThread().getName() + "即将到达集合地点1,当前已有"
                                + (cb.getNumberWaiting() + 1) + "个已到达"
                                + (cb.getNumberWaiting() == 2 ? "都到齐了,继续走啊" : "正在等候"));
                        try
                        {
                            cb.await();
                        }
                        catch (BrokenBarrierException e)
                        {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        Thread.sleep((long) (Math.random() * 10000));
                        System.out.println("线程" + Thread.currentThread().getName() + "即将到达集合地点2,当前已有"
                                + (cb.getNumberWaiting() + 1) + "个已到达"
                                + (cb.getNumberWaiting() == 2 ? "都到齐了,继续走啊" : "正在等候"));
                        try
                        {
                            cb.await();
                        }
                        catch (BrokenBarrierException e)
                        {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        Thread.sleep((long) (Math.random() * 10000));
                        System.out.println("线程" + Thread.currentThread().getName() + "即将到达集合地点3,当前已有"
                                + (cb.getNumberWaiting() + 1) + "个已到达"
                                + (cb.getNumberWaiting() == 2 ? "都到齐了,继续走啊" : "正在等候"));
                        try
                        {
                            cb.await();
                        }
                        catch (BrokenBarrierException e)
                        {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    catch (InterruptedException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            };
            service.execute(runnable);
        }
        service.shutdown();
    }
}

 

 

分享到:
评论

相关推荐

    CountDownLatch和CyclicBarrier用法实例大全

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

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

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

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

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

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

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

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

    ### CountDownLatch 和 CyclicBarrier 的运用(含AQS详解) #### CountDownLatch **定义与特点:** CountDownLatch 是 Java 并发包中的一个重要组件,它主要用于解决“一个或多个线程等待其他线程完成任务”的问题。...

    详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

    在Java并发编程中,CountDownLatch和CyclicBarrier都是用于协调多线程间同步的重要工具,它们可以帮助开发者在特定条件满足时启动或者结束线程的执行。本文将详细探讨这两个类的内部实现机制以及它们在实际应用场景...

    CountDownLatch、CyclicBarrier、Semaphore.md

    java 高并发应用场景

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

    Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解 Java并发编程是Java语言中的一种高级技术,用于处理多线程编程中的同步问题。Java 1.5中引入了几个高效的辅助类,包括CountDownLatch、...

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

    在Java并发编程中,CountDownLatch、CyclicBarrier和Semaphore是三种重要的线程协作工具,它们都基于AbstractQueuedSynchronizer(AQS)框架来实现线程间的同步和协调。AQS是一个内置的锁和同步组件,它为构建高级...

    Java并发编程之美_部分71

    本节主要讲解了Java并发包中线程同步器原理剖析,具体来说是 CountDownLatch 和 CyclicBarrier 的使用和原理剖析。 一、CountDownLatch CountDownLatch 是一个同步工具,它可以让一个线程等待其他线程完成某些操作...

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

    CountDownLatch是Java并发编程中一个重要的工具类,用于协调多线程间的同步。它由Java并发包`java....在实际编程中,应根据具体需求选择CountDownLatch或CyclicBarrier,以及其他并发工具,以确保程序的正确性和性能。

    Java中的CyclicBarrier类最全讲义

    虽然`CyclicBarrier`和`CountDownLatch`都是Java并发工具包中用于实现线程间协作的工具,但它们之间存在一些关键的区别: - **用途**:`CyclicBarrier`主要用于需要多个线程同时到达一个点的情况,而`...

    Java进阶教程,面试大全

    Java进阶教程,面试大全1,可参考以下问题: Semaphore-信号灯机制。 synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生...CountDownLatch和CyclicBarrier的用法,以及相互之间的差别。

    Java进阶教程,面试大全,包罗万象

    Java进阶教程,面试大全1,可参考以下问题: Semaphore-信号灯机制。 synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生...CountDownLatch和CyclicBarrier的用法,以及相互之间的差别。

    Java中的CountDownLatch类最全讲义

    目录: 简介 1.1 并发编程与线程同步 1.2 CountDownLatch概述 CountDownLatch的基本用法 2.1 创建CountDownLatch对象 2.2 await()方法 ...CountDownLatch与CyclicBarrier的对比 最佳实践与注意事项

    Java线程核心技术及常见面试问题解答

    本文详细介绍了Java线程的基本概念、线程的安全与同步机制、多种线程间通信方式、Java内存模型,以及线程池的原理与使用技巧,涵盖了许多常用的线程和并发控制组件如synchronized、ReentrantLock、CountDownLatch、...

    Java Java程序设计 Java学习文档 Java语言

    线程同步和通信机制(如synchronized关键字、wait()、notify()、锁对象、CountDownLatch、CyclicBarrier等)是这部分学习的重点。 网络编程也是Java的重要组成部分,Socket编程允许创建客户端和服务器应用,实现...

    Java并发编程-3.pdf

    CountDownLatch、CyclicBarrier 和 Semaphore 等多线程协作机制都是 Java 并发编程中的重要组成部分。它们可以帮助开发者编写高效、可靠的多线程程序,解决复杂的并发问题。 在实际开发中,我们可以根据具体情况...

    java多线程并发实战和源码

    此外,Java并发工具类(java.util.concurrent包)提供了许多实用的工具,如ExecutorService、Future、CountDownLatch、CyclicBarrier和ThreadPoolExecutor等。Executor框架简化了线程池的管理和任务调度,而Future...

    JUC面试知识点手册快速版

    4.1 CountDownLatch 4.2 CyclicBarrier 4.3 Semaphore 4.4 Exchanger 第五章:原子类和无锁编程 5.1 AtomicInteger与AtomicLong 5.2 AtomicReference 第六章:线程池及其应用 6.1 ThreadPoolExecutor 6.2...

Global site tag (gtag.js) - Google Analytics