天天看點

線程同步工具類 | 學習筆記

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