開發者學堂課程【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 可以進行重置處理;