本篇内容包括:Java 并发工具类的介绍、使用方式与 Demo,包括了 CountDownLatch(线程计数器)、CyclicBarrier(回环栅栏)、Semaphore(信号量) 以及 Exchanger...CountDownLatch(线程计数器) CountDownLatch 线程计数器,俗称闭锁,作用是类似加强版的 Join,是让一组线程等待其他的线程完成工作以后才执行 CountDownLatch 类位于 java.util.concurrent
,它相当于一个同步容器的升级版,很大程度上提高了并发的性能 今天我们来介绍 JUC 中的并发工具,**它主要是通过改变自身的状态来控制线程的执行流程**; 常见的有如下几种: **CountDownLatch...只不过阻塞的方式不同,下面会具体介绍) **Semaphore**:信号量,用来控制多个线程同时访问指定的资源,比如我们常用的数据库连接池 下面让我们开始吧 文章如果有问题,欢迎大家批评指正,在此谢过啦 目录 什么是并发工具...什么是并发工具 并发工具是一组工具类,主要是用来控制线程的执行流程,比如阻塞某个线程,以等待其他线程 2....数据库连接池 | 可以看到,倒计数器主要是用来表示单个线程等待多个线程,而循环栅栏主要是用来表示多个线程之间的相互等待 总结 什么是并发工具:并发工具是一组工具类,主要是用来控制线程的执行流程,比如阻塞某个线程...数据库连接池 | 参考内容: 《Java并发编程实战》 《实战Java高并发》 后记 学习之路,真够长,共勉之 写在最后: **愿你的意中人亦是中意你之人**
在J.U.C包中,提供了几个非常有用的并发工具类,通过使用这些工具类,可以有效提高并发编程中,并发流程的控制,以提升效率和代码质量,如下: CountDownLatch CyclicBarrier Semaphore...控制并发线程数的Semaphore Semaphore(信号量)用来控制同时访问特定资源的线程数量; 1....} 在构造函数中,可以传入两个参数: permits: 可用的许可证数量 fair: 是否公平获取许可证 比如Semaphore(10,true),就表示允许10个线程获取许可证,也就是最大的并发量为
Java并发工具类主要有CyclicBarrier、CountDownLatch、Semaphore和Exchanger,日常开发中经常使用的是CountDownLatch和Semaphore。...下面就简单分析下这几个并发工具类: CyclicBarrier 内存屏障 CyclicBarrier底层借助于一个count计数器和Lock/Condition实现内存内存屏障功能,在对count--时必须先获取到...; executor.execute(task); executor.execute(task); } Exchanger 线程间交换数据 Exchanger是一个用户线程间交换数据的工具类
等待多线程完成CountDownLatch 同步屏障CyclicBarrier 控制并发线程数Semaphore 线程间交换数据Exchanger 在J.U.C包中,提供了几个非常有用的并发工具类,CountDownLatch...、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段。...通过使用这些工具类,可以有效提高并发编程中,并发流程的控制,以提升效率和代码质量。 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作。...测试类 import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger...参考: 《Java并发编程的艺术》 Java并发工具类:https://blog.csdn.net/weixin_36208314/article/details/115077591 Java并发工具类详解
:返回是否有线程在等待 void reducePermits(int reduction):减少reduction个许可证,是个protected方法 以下例子虽然有30个线程在执行,但是只允许10个并发执行...: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore
,阻塞等待第二个线程也执行exchange方法,都到达同步点时,线程就可以交换数据 exchange(V x, long timeout, TimeUnit unit)方法可以超时等待 import java.util.concurrent.Exchanger...; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author
构造参数int parties,表示屏障拦截的线程数量,每个线程调用await()方法表示自己已经到达屏障,进入阻塞 import java.util.concurrent.CyclicBarrier;...} 有一个更高级的方法CyclicBarrier(int parties, Runnable barrierAction)用于在线程达到屏障点时,优先执行barrierAction: import java.util.concurrent.CyclicBarrier
import java.util.concurrent.CountDownLatch; /** * @author pengjunzhe */ public class CountDownLatchTest
(5)getCount() 返回当前count的数量 下面我们看一个比较典型的一个例子: package concurrent.tools; import java.util.Random; import...java.util.concurrent.CountDownLatch; /** * Created by Administrator on 2018/8/20. */ public class...new IgniteInterruptedCheckedException(e); } } 最后需要注意的是CountDownLatch仅仅只能被用一次,不能被重置,如果需要循环重置则需要使用Java...并发工具包的另外一个类CyclicBarrier。
Phaser(移相器,一种电子元件)是JDK7中引入的新的并发工具辅助类,oralce官网文档描述Phaser是一个可重复使用的同步栅栏,功能上与 CountDownLatch 和 CyclicBarrier...类似但支持的场景更加灵活,这个类可能是目前并发包里面实现最复杂的一个了。...这其实就是一个典型的循环栅栏的例子,我们直接来看如何使用Phaser来完成: package concurrent.tools.phaser; import java.util.Random; import...java.util.concurrent.Phaser; import java.util.concurrent.TimeUnit; /** * Created by Administrator...本文主要了介绍了JDK7引入的并发工具类Phaser,这个类的功能与CountDownLatch 和 CyclicBarrier类似但更灵活,这个类底层相对比较复杂并没有采用AQS同步框架实现,而是单独定义了相关功能
等核心组件,其实 JDK 给开发者还提供了比synchronized更加高级的线程同步组件,比如 CountDownLatch、CyclicBarrier、Semaphore、Exchanger 等并发工具类...下面我们一起来了解一下这些常用的并发工具类!...二、常用并发工具类 2.1、CountDownLatch CountDownLatch是 JDK5 之后加入的一种并发流程控制工具类,它允许一个或多个线程一直等待,直到其他线程运行完成后再执行。...下面我们还是先看一个简单的示例,以便于更好的理解这个工具类。...三、小结 本文主要围绕 Java 多线程中常见的并发工具类进行了简单的用例介绍,这些工具类都可以实现线程同步的效果,底层原理实现主要是基于 AQS 队列式同步器来实现,关于 AQS 我们会在后期的文章中再次介绍
Java 并发包提供了哪些并发工具类 Java 基础并发工具类 提供了比 synchronized更加高级的各种同步结构,包括 CountDownLatch, CyclicBarrier、 Semaphore...比如最常见的 ConcurrentHashMap、有序的 ConcunrrentskipListMap,或者通过类似快照机制,实现线程安全的动态数组 Copy onWriteArrayuist等 各种并发队列实现...并发包工具需要掌握哪些 从总体上,把握住几个主要组成部分 理解具体设计、实现和能力。...再深入掌握一些比较典型工具类的适用场景、用法甚至是原理,并熟练写岀典型的代码用例 CountDownLatch 允许一个或者多个线程等待操作完成 CountDownLatch 是不可以重置的,无法重用...https://www.baeldung.com/java-phaser 线程安全的集合 线程安全Map ,List 和 Set。
我们通常所说的并发包也就是 java.util.concurrent 及其子包,集中了 Java 并发的各种基础工具类,具体主要包括几个方面 提供了比 synchronized 更加高级的各种同步结构,...Semaphore,Java 版本的信号量实现。...各种并发队列实现,如各种 BlockedQueue 实现,比较典型的 ArrayBlockingQueue、 SynchorousQueue 或针对特定场景的 PriorityBlockingQueue
同步工具类是个笼统的概念,它可以根据自身状态来协调线程的控制流,了解JAVA中常用的同步工具能帮助开发者写出更好的并发代码。...import java.util.concurrent.CountDownLatch; public class Main { public static void main(String[...import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException...小菜收到消息:我是阿坤,No.2 小菜收到消息:我是阿坤,No.3 阿坤收到消息:我是小菜,No.3 阿坤收到消息:我是小菜,No.4 小菜收到消息:我是阿坤,No.4 done~ */ 总结 所谓同步工具类并不特指实现某种功能的类...,它们主要的价值就在于能帮助多线程之间更好地相互配合完成工作,只要对自己的需求清晰,对JAVA自带的类熟悉,就能选择合适的同步工具类,甚至实现自己需要的同步工具类。
转载请以链接形式标明出处: 本文出自:103style的博客 Java并发编程的艺术笔记 并发编程的挑战 Java并发机制的底层实现原理 Java内存模型 Java并发编程基础 Java中的锁的使用和实现介绍...Java并发容器和框架 Java中的12个原子操作类介绍 Java中的并发工具类 Java中的线程池 Executor框架 ---- 简介 在JDK的并发包里提供了几个非常有用的并发工具类。...提供并发流程控制的工具类 CountDownLatch CyclicBarrier Semaphore 提供了在线程间交换数据的工具类 Exchanger 本文会配合一些应用场景来介绍如何使用这些工具类...线程间交换数据的Exchanger Exchanger(交换者)是一个用于线程间协作的工具类。 Exchanger用于进行线程间的数据交换。...小结 本文配合一些应用场景介绍JDK中提供的几个并发工具类,大家记住这个工具类的用途,一旦有对应的业务场景,不妨试试这些工具类。
Lock接口(和相关实现类)可以来用来实现锁功能。 缺少了隐式释放和获取锁的便捷性,但是多了获取和释放锁的可操作可中断的获取锁,以及超时获取锁等特性。 Lock...
SynchronousQueue基本原理是构建在配对或者叫直接交接的机制上其与Java里面另外常见的两个阻塞队列LinkedBlockingQueue和ArrayBlockingQueue是不同的,在SynchronousQueue...这种机制看似非常的不合理,但其确实有其使用的场景,尤其是消息或者任务的传递,这种模式更像CSP的并发模型Communicating Sequential Process,这里引申一下一些语言里面的并发机制...在Java里面线程池Executors.newCachedThreadPool就是使用SynchronousQueue类在内部构建,创建的线程数量仅仅是按需所取,使用SynchronousQueue的目的就是保证...本文主要介绍了Java里面比较特殊的一种阻塞队列SynchronousQueue,其设计的主要目的是为了处理一些handoff(切换/传递)的设计,指的是一个线程的信息,事件或者任务要传递到另一个线程中处理...,这种处理方式与CSP的并发机制比较类似,并且在队列和线程数量为1的时候相比其他的阻塞队列,其吞吐量非常出色,所以我们可以在一些适合的场景下使用这个特别的同步阻塞队列。
CyclicBarrier这个并发工具类和上篇文章中提到的CountDownLatch比较类似,可以把CyclicBarrier看做是可以可以复用的CountDownLatch。...count > 0) mutex.wait(); mutex.notifyAll(); } } } 总结: 本文主要了介绍了Java
Semaphore是Java里面另外一个基本的并发工具包类,主要的的作用是用来保护共享资源的访问的,也就是仅仅允许一定数量的线程访问共享资源。...总结: 本文主要介绍了并发工具包Semaphore其主要作用来限制对于共享资源的访问,接着我们又介绍了其特点,使用及注意事项,然后又给出了使用其他同步工具Lock+Condition实现的Semaphore
领取专属 10元无门槛券
手把手带您无忧上云