开发者学堂课程【Java 面试疑难点串讲1:面试技巧及语言基础:线程同步工具类】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/24/detail/525
线程同步工具类
内容介绍
一、线程同步工具类
一、线程同步工具类
CvcleBarrier 和 CountDownLatch 区别及实现原理。
这两个类是 java.util.concuent 定义的操作类,主要的功能是进行线程同步处理的工具类。
特征:
CyvcleBarrier 相当于汇聚多个等待线程,都到了,一起干;
CountDownLatch 等待所有人都走了,我再干。
范例:观察 CountDownLatch
package vshop;
import java.util.concurrent.CountDownLatch;
public class Demo {
public static void main(string[] args) throws Exception {
CountDownLatch down = new CountDownLatch(2);//
两个走了
for (int x = 0; x<2; x++) {
new Thread(()->{
System.out.println(Thread.currentThread().getName() +",
运行结束");
down.countDown(); //
相当于执行一个减
}).start();
down.await(); //
等其余的线程执行完了,我再放行,这个时候进入到了一个阻塞状态
System.out.println( "
【FINISH】全部线程执行结束。");
}
}
就是执行了一个阻塞的操作处理。CycleBarrier 是一个互相等待状态。
import java.util.concurrent.cyclicBarrier;
public class Demo {
public static void main(string[ ] args) throws Exception {
CyclicBarrier barrier = new CyclicBarrier(2);//
两个人一条船
for (int x = 0; x < 3; x++) { //
走一次
new Thread(() -> {
System.out.println("
【" +Thread.currentThread( ).getName() + " - BEFORE】线程等待。。。" );
try {
barrier.await();//
等够两个人就走
} catch (Exception e) {
e.printstackTrace();
}
System.out.println("
【" +Thread.currentThread( ).getName( ) + " AFTER】开船走。。。");
}).start();
}
System.out.println( "
【FINISH】全部线程执行结束。");
}
}
本质区别:
CountDownLatch 是一计到底,也就是说如果你一开始设置了2个计数线程就一直减,不能重置;
CycleBarrier 可以进行重置处理;