一、CyclicBarrier   (原文链接:http://www.studyshare.cn/blog-front/blog/index )

1、定义

CyclicBarrier是线程并发工具类之一,俗称栅栏。当一组线程全部执行完后,到达栅栏屏障,就放开屏障,继续往后执行。举个简单例子:几个家庭约

定一个地点集合去郊游,只有当所有家庭都到达后再商量下一步计划,只要有一个没到,先到达的家庭都必须等待。

2、示例demo

实现:用5个子线程去执行任务,当任务执行完成后,交出自己的执行结果,再被统一释放(开放栅栏)去做自己的事情,而之前5个子线程交出的结果

被另外一个线程使用做其他工作。

代码如下:

3、执行结果:

二、CountDownLatch

1、定义

CountDownLatch是线程并发工具类,该类具有一个计数器,计数器具有一个初始化的值,当主线程调用latch.await()方法则进行阻塞,调用

latch.countDown()方法时计数器值减一,一直等到计数器的值减为0的时候,原来阻塞的方法继续往下执行。代码如下:

(1)、定义两个线程,线程一调用一次countDown(),线程二调用两次countDown()

(2)、主线程代码如下

(3)运行结果

2、使用场景

(1)、使用CountDownLatch编写高并发测试程序,可以使用CountDownLatch初始化100或者更多线程,当所有线程初始化完毕后

一起去调用需要测试的业务模块代码,以此来模拟实际场景的高并发访问,测试业务代码对高并发的支持极限。

(2)、某些系统启动之前需要做很多初始化工作,只有当初始化工作线程中的所有代码执行完毕后,才继续执行主线程代码,此时

使用CountDownLatch来实现。

3、实现原理

CountDownLatch是基于AQS(AbstractQueuedSynchronizer (抽象队列同步器))实现的,关于AQS在另外一篇文章有详细讲解,包

括对源码进行了深入分析,请参考:http://www.studyshare.cn/blog-front//blog/details/1131/0

三、Semaphore

1、定义:

Semaphore:即信号量,它管理着一组虚拟的许可,许可的初始数量可通过构造函数指定,在执行操作时先获取许可(只要还有剩余的

许可),并在使用后释放许可,如果没有许可,则acquire方法会阻塞直到有许可。它提供的release()方法将返回一个许可给信号量。

2、关键方法

aquire():获取一个虚拟许可,如果Semaphore中还有剩余许可,则返回,否则此方法会阻塞,直到Semaphore中有许可为止。

release():释放一个虚拟许可回Semaphore中

3、使用场景

使用Semaphore实现一个数据库连接池。demo源码下载

(1)首先定义一个数据库连接实现类,实现java.sql.Connection接口,如下

说明:java.sql.Connection实现方法很多,已省略。可下载demo源码查看

(2)使用Semaphore实现数据库连接池,代码如下:

(3)、运行验证结果分析

原创文章,转载请注明来源:http://www.studyshare.cn/blog-front/blog/details/1157/0

更多技术文章:http://www.studyshare.cn/blog-front//blog/index

java线程并发工具类CyclicBarrier、CountDownLatch及Semaphore的更多相关文章

  1. 线程并发工具类之CountDownLatch的使用及原理分析

    原文链接:http://www.studyshare.cn/blog/details/1149/1 java开发工具下载地址及安装教程大全,点这里.更多技术文章,在这里. 一.定义 CountDown ...

  2. java线程并发工具类

    本次内容主要讲Fork-Join.CountDownLatch.CyclicBarrier以及Callable.Future和FutureTask,最后再手写一个自己的FutureTask,绝对干货满 ...

  3. 并发工具类:CountDownLatch、CyclicBarrier、Semaphore

    在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...

  4. Java核心知识点学习----线程同步工具类,CyclicBarrier学习

    线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. 1 ...

  5. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

  6. Java多线程并发工具类-信号量Semaphore对象讲解

    Java多线程并发工具类-Semaphore对象讲解 通过前面的学习,我们已经知道了Java多线程并发场景中使用比较多的两个工具类:做加法的CycliBarrier对象以及做减法的CountDownL ...

  7. 【Java并发工具类】CountDownLatch和CyclicBarrier

    前言 下面介绍协调让多线程步调一致的两个工具类:CountDownLatch和CyclicBarrier. CountDownLatch和CyclicBarrier的用途介绍 CountDownLat ...

  8. j.u.c系列(08)---之并发工具类:CountDownLatch

    写在前面 CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待“:用给定的计数 初始化 CountDownLatch.由于调用了 countDo ...

  9. Java中的并发工具类:CountDownLatch、CyclicBarrier和Semaphore

    在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 一. ...

随机推荐

  1. mysql一些操作

    1.产生随机数 SELECT rand();   随机一个0-1的随机数. 2.截取小数点后 SELECT FORMAT(RAND()*10000,2); 在返回 1,306.47 数据中“,” SE ...

  2. C趣味题目

    http://www.cnblogs.com/lua5/archive/2010/12/05/1896755.html   c语言趣味题目 http://www.cppblog.com/OnTheWa ...

  3. 使用IDEA创建一个springboot项目

    工欲善其事,必先利其器. 不难发现,还是有很多小朋友在使用eclipse开发java项目.当你接触IDEA后,一切都变得美好了. 使用IDEA创建一个springboot项目是一件极其简单的事情.界面 ...

  4. Python基础-os、sys模块

    一,os模块import os ,sysos.system('ipconfig')#执行操作系统命令,获取不到返回结果 os.popen()#也可以执行操作系统命令,可以返回命令执行结果,但需要rea ...

  5. Python基础知识之字符串操作方法总结

    Python 中字符串也是一种数据类型,针对此数据总结下常用的方法 1,字符串截取,变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾 ...

  6. java_面试_01_一个月的面试总结(java)

    重点知识 由于我面试的JAVA开发工程师,针对于JAVA,需要理解的重点内容有: JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻) JVM内存调优(了解是怎么回事,一般做项目过程 ...

  7. codeforces 653C C. Bear and Up-Down(乱搞题)

    题目链接: C. Bear and Up-Down time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  8. 【leetcode刷题笔记】Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  9. 比线程更NB的存在

    阅读目录 一 引子 二 协程介绍 三 Greenlet模块 四 Gevent模块 引子 之前我们学习了线程.进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位.按道理来 ...

  10. 霍夫变换Hough

    http://blog.csdn.net/sudohello/article/details/51335237 霍夫变换Hough 霍夫变换(Hough)是一个非常重要的检测间断点边界形状的方法.它通 ...