java中常用的并发工具有哪些
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"java中常用的并发工具有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java中常用的并发工具有哪些"吧!1)闭锁Count
千家信息网最后更新 2026年11月01日java中常用的并发工具有哪些
这篇文章主要讲解了"java中常用的并发工具有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java中常用的并发工具有哪些"吧!
1)闭锁CountDownLatch
功能:让一个主线程等待一组工作线程执行完毕之后,才继续执行主线程,与join()方法的功能类似。原理: 1)CountDownLatch是通过一个计数器来实现的,计数器的初始值为需要等待线程的数量。 2)当一个线程完成了自己的任务后,计数器的值就会减1。 3)当计数器值为0时,说明所有的线程都执行完了,此时,在闭锁上等待的线程就可以恢复执行任务。注意: 1)countDown()可以在每个线程中调用一次,也可以在一个线程中调用多次。 2)计数器必须大于等于0,计数器为0时,调用await方法时不会阻塞当前线程。
2)屏障(栅栏)CyclicBarrier
功能:让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门(trip),所有被屏障拦截的线程才会继续运行。CyclicBarrier和CountDownLatch的区别: 1)CountDownLatch的计数器只能使用一次,而CyclicBarrier的计数器可以使用reset()方法重置。 2)到达某个点后,使用CountDownLatch的线程继续运行,使用CyclicBarrier的线程停止运行: 使用CountDownLatch的线程运行到某个点之后,调用 countDown() 方法将计数器的值减1,之后线程继续执行。 使用CyclicBarrier 的线程运行到某个点之后,调用 await() 方法使该线程停止运行,直到所有的线程都到达了这个点(调用await方法),(所有的)线程才可以继续运行。
3)信号量Semaphore
功能:控制并发的线程数。原理: 1)线程通过acquire()方法获取许可证。 2)线程通过release()方法归还许可证。说明:使用tryAcquire()方法可以立即得到执行的结果:尝试获取一个许可证,若获取成功,则立即返回true,若获取失败,则立即返回false。 应用:流量控制,例如数据库连接数的控制等。
4)交换者Exchanger
功能:两个线程间数据的交换。原理: 1)线程A调用public V exchange(V dataA)方法,线程A到达同步点,并且在线程B到达同步点前一直等待。 2)线程B调用public V exchange(V dataB)方法,线程B到达同步点。 3)线程A与线程B都达到同步点时,线程将自己的数据传递给对方,两个线程完成了数据的交换了。 举例: public class ExchangerTest { public static void main(String[] args) { final Exchanger exchanger = new Exchanger(); ExecutorService service = Executors.newFixedThreadPool(2); service.execute(new Runnable() { public void run() { try { String originalData = "dataA"; Thread.sleep(2000); System.out.println("线程" + Thread.currentThread().getName() + "正在把数据[" + originalData + "]传递出去..." + " time:" + System.currentTimeMillis()); String exchangedData = exchanger.exchange(originalData); System.out.println("线程" + Thread.currentThread().getName() + "获取到另一线程的数据[" + exchangedData + "]" + " time:" + System.currentTimeMillis()); } catch (Exception e) { e.printStackTrace(); } } }); service.execute(new Runnable() { public void run() { try { String originalData = "dataB"; Thread.sleep(6000); System.out.println("线程" + Thread.currentThread().getName() + "正在把数据[" + originalData + "]传递出去..." + " time:" + System.currentTimeMillis()); String exchangedData = exchanger.exchange(originalData); System.out.println("线程" + Thread.currentThread().getName() + "获取到另一线程的数据[" + exchangedData + "]" + " time:" + System.currentTimeMillis()); } catch (Exception e) { e.printStackTrace(); } } }); } } 结果: 线程pool-1-thread-1正在把数据[dataA]传递出去... time:1506414528645 线程pool-1-thread-2正在把数据[dataB]传递出去... time:1506414532645 线程pool-1-thread-2获取到另一线程的数据[dataA] time:1506414532645 线程pool-1-thread-1获取到另一线程的数据[dataB] time:1506414532645 感谢各位的阅读,以上就是"java中常用的并发工具有哪些"的内容了,经过本文的学习后,相信大家对java中常用的并发工具有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
线程
数据
方法
计数器
运行
功能
屏障
常用
正在
同步
原理
许可证
学习
控制
两个
任务
内容
结果
阻塞
成功
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技企业
互联网最新的科技
工业互联网科技新基建
互联网巨头科技公司
喔噻互联网科技
广州互联网络科技有限公司
友谊互联网络科技
互联网科技论坛
互联网高科技企业
多迪互联网科技有限公司
中化能源互联网科技招聘
宁夏众和广鑫互联网科技有限公司
互联网经济与金融科技
彤创互联网科技有限公司
互联网科技公司有风险吗
河南住房之家互联网科技
上海京穆互联网科技有限公司
深圳无忧互联网科技
互联网科技收购价值
广东猫王互联网科技有限公司电话
南京欣网互联网络科技有限公司
互联网品科技
互联网为科技
狮子座互联网科技
太原新华互联网科技学校怎么样
速维有品互联网信息科技(苏州)有限公司
深圳育鹏互联网科技有限公司招聘
为客找房互联网科技公司怎么样
互联网科技实习生岗位
互联网领先科技成果宣传视频