java中常用的并发工具有哪些
发表于:2024-10-07 作者:千家信息网编辑
千家信息网最后更新 2024年10月07日,这篇文章主要讲解了"java中常用的并发工具有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java中常用的并发工具有哪些"吧!1)闭锁Count
千家信息网最后更新 2024年10月07日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 Exchangerexchanger = 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安全错误
数据库的锁怎样保障安全
黄浦区威力软件开发诚信为本
中文科技期刊数据库和维普关系
商用网络存储服务器
金山网络安全占用cpu高
乌俄网络安全
乐拼互联网科技有限公司
嵌入式软件开发区美食图片
应用无法连接数据库是什么原因
十堰电子仓库软件开发
网络安全管理员四级好考么
ntp服务器实现原理
怎么设计好的数据库
如何在指定数据库建表
sql数据库表关系图
java输出数据库表信息
杭州义牛网络技术是那个网贷
软件开发公司套路
软件开发企业规划书
oracle数据库表库空间
计算机网络技术 尔雅
国资网络安全概念涨停
中国网络技术优势
怎么实现前端数据添加到数据库
普华永道软件开发面试题目
数据库创建新表示例
数据库如何交叉编译
dayz服务器怎么设置资源
vc opc 服务器
在数据库中emp
河北特色软件开发价钱