java中常用的并发工具有哪些
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要讲解了"java中常用的并发工具有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java中常用的并发工具有哪些"吧!1)闭锁Count
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
企业微信公司需要服务器吗
合阳县崇雨网络技术有限公司
从化软件开发有限公司
ios网络安全认证
打印服务器系统
为何总是显示微信无法找到服务器
无锡专业服务器维修
贴片机控制软件开发
网络技术流是什么意思
炎陵软件开发技工学校
美团网软件开发工资
网络安全简介70字
服务器设置多用户同时登陆
如何关闭云服务器的加速
王姗数据库课后题答案
计算机网络技术技师专业
微信转发谣言 网络安全
网络安全前十名股票
不能将网页上传到服务器的是什么
2021数据库系统工程师真题
安全风险分级数据库
学科office软件开发公司
奉贤软件开发设计
山东服务器虚拟化多少钱
嘉定区一站式软件开发供应商
福州金鑫网络技术
西安智协网络技术有限公司
如何践行网络安全
燃烧的远征部落战场服务器
四五打印助手数据库密码