Java中的并发工具类

1、等待多线程完成的CountDownLatch        

CountDownLatch允许一个或多个线程等待其他线程完成操作。join用于让当前执行线程等待join线程执行结束。其实现原理是不停检查join线程是否存活,如果join线程存活则让当前线程永远等待。直到join线程中止后,线程的this.notifyAll()方法会被调用,调用notifyAll()方法是在JVM里实现的。

2、同步屏障CyclicBarrier                            

CylicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。

CountDownLatch的计数器只能使用一次,而CyclicBarrier的计数器可以使用rest()方法重置。所以CyclicBarrier能处理更为复杂的业务场景。

3、控制并发线程数的Semaphore                  

Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。

Semaphore可以用于流量控制,特别是公用资源有限的应用场景,比如数据库连接。

Semaphore的用法:首先线程使用Semaphore的acquire()方法获取一个许可证,使用完之后调用release()方法归还许可证。还可以用tryAcquire()方法尝试获取许可证。

4、线程间交换数据的Exchanger                    

Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。分别调用exchange()方法。

Exchanger可以用于遗传算法,校对工作。

时间: 2024-10-01 07:16:02

Java中的并发工具类的相关文章

第八章 Java中的并发工具类

等待多线程完成的CountDownLatch countDownLatch允许一个或多个线程等待其他线程完成操作. public class CountDownLatchTest { static CountDownLatch countDownLatch = new CountDownLatch(2); public static void main(String[] args) throws InterruptedException{ new Thread(new Runnable() {

8.java并发编程的艺术-java中的并发工具类

1. 等待做线程完成的CountDownLatch 2. 同步屏障CyclicBarrier 2.1 CycliBarrier简介 2.2 CycliBarrier的应用场景 2.3 CycliBarrier和CountDownLatch的区别 3. 控制并发线程数的Semaphore 4. 线程间交换数据的Exchanger 5.本章小结 原文地址:https://www.cnblogs.com/panda777/p/11640809.html

java中常用的工具类(二)

下面继续分享java中常用的一些工具类,希望给大家带来帮助! 1.FtpUtil Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

java中常用的工具类(三)

继续分享java中常用的一些工具类.前两篇的文章中有人评论使用Apache 的lang包和IO包,或者Google的Guava库.后续的我会加上的!谢谢支持IT江湖 一.连接数据库的综合类 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

java中常用的工具类(一)

我们java程序员在开发项目的是常常会用到一些工具类.今天我汇总了一下java中常用的工具方法.大家可以在项目中使用.可以收藏!加入IT江湖官方群:383126909 我们一起成长 一.String工具类 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 5

JAVA中封装JSONUtils工具类及使用

在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. 封装后的JSON工具类JSONUtils.java代码如下: JSONUtils代码,点击展开 import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.Itera

java中常用的工具类

一.String工具类 package com.itjh.javaUtil; import java.util.ArrayList; import java.util.List; /** * * String工具类. <br> * * @author 宋立君 * @date 2014年06月24日 */ public class StringUtil { private static final int INDEX_NOT_FOUND = -1; private static final St

第10篇 Java中的常用工具类

整理下这一周的最后一些内容.虽然东西不多,但以后也可以常回来看看. 个人感觉还是代码最好表达自己想要记忆的东西,不够的话再把注释加上.乱七八糟的概念百度上大同小异,只有代码是属于你自己的,是唯一的,也是你应该留下的. 包装类 我们所使用的一般数据类型,又称为值类型.这种数据类型存储在栈中,不属于对象的范畴.但Java是一门面向对象的语言,万物皆对象,自然不能把这些值类型排除在外,所以有了包装类. 所谓包装类,就是把我们所用到的值类型变量进行一个包装,使我们能通过对象的方式对其进行操作,让其有自己

Java 中的Array工具类

1.boolean equals(array1,array2):比较两个数组是否相等.import java.util.Arrays;public class Ch03 { public static void main(String[] args) { // TODO Auto-generated method stub String[] str1={"1","2","3"}; String[] str2={"1",&quo