一、CountDownLatch(门闩)
参考博客:https://www.cnblogs.com/skywang12345/p/3496101.html
import java.util.concurrent.CountDownLatch;
/*
*CountDownLatch的本质也是一个"共享锁"
* CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
*/
public class Test_CountDownLatct {
private static final int COUNT=100;
public static void main(String[] args) {
usingJoin();
usingCountDownLatct();
}
public static void usingJoin(){
Thread[] threads=new Thread[COUNT];
for (int i = 0; i < COUNT; i++) {
threads[i]=new Thread("Thread_"+i);
}
for (Thread t:threads) {
t.start();//启动线程
}
for (Thread t:threads) {
try {
t.join();
}catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.println("join end!");
}
public static void usingCountDownLatct(){
Thread[] threads=new Thread[COUNT];
CountDownLatch latch=new CountDownLatch(threads.length);
for (int i = 0; i < COUNT; i++) {
threads[i]=new Thread(()->{
//业务逻辑
latch.countDown();//释放一把锁
});
}
for (Thread t:threads) {
t.start();//启动线程
}
try {
latch.await();
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println("countDownLatch end!");
}
}
二、CyclicBarrier(栅栏)
import java.util.concurrent.CyclicBarrier;
public class Test_CyclicBarrier {
public static void main(String[] args) {
CyclicBarrier barrier=new CyclicBarrier(20,()-> System.out.println("栅栏,人满发车!"));
for (int i = 0; i < 101; i++) {
new Thread(()->{
try {
barrier.await();
}catch (Exception e){
e.printStackTrace();
}
}).start();
}
}
}