很多朋友在JAVA开发过程中,遇到需要并发编程的场景就头皮发麻,网上教程又五花八门没有头绪,所以本文旨在通过一篇文章将Java并发编程的常用场景、工具类和测试代码囊括其中,并且根据读者的建议和自我学习不断更新,希望对你我有所帮助。
——山村码农 2023.4.25
1 java.util.concurrent包下的工具类
1.1 CountDownLatch 计数器
java.util.concurrent.CountDownLatch
线程计数器:其他线程执行完成,才能继续执行接下来的一个或多个线程。
举例: [请朋友们评论区举个例子]
创建调用次数为3的CountDownLatch计数器
CountDownLatch countDownLatch = new CountDownLatch(3);
需要等待的线程执行await方法
countDownLatch.await();
预先执行的线程执行countDown方法,计数器减1
countDownLatch.countDown();
1.2 CyclicBarrier工具类
java.util.concurrent.CyclicBarrier
循环屏障:多个线程全部执行完(不区分前后顺序),再同时向下执行。
举例:读取批量大文件,拆分成多个小文件同时读取,全部读完再合并。
创建有3个线程数触发的循环屏障
CyclicBarrier barrier = new CyclicBarrier(3);
线程等待直到所有线程都调用了此方法
barrier.await();
1.3 Phaser阶段器/移相器
java.util.concurrent.Phaser
阶段器/移相器:和CyclicBarrier很像,也是多个线程都完成再同时往下执行。区别在于Phaser可以设置多个阶段、线程可以注册(register)和退出(deregister)。
在这里插入代码片