7 減法計數器 加法計數器 訊號量

2022-10-11 09:06:12 字數 1958 閱讀 9214

1.countdownlatch:減法記數器

有三個重要方法:

1.初始化,並確定計數器最大值

countdownlatch countdownlatch = new countdownlatch(6);

2.計數器數量-1

countdownlatch.countdown();

3.等待計數器歸0,然後再往下執行

countdownlatch.await();

樣例**如下:

public class countdownlatch_test catch (interruptedexception e)

new thread(() -> , "執行緒" + i).start();

}//重點3:等待記數器歸0,然後往下執行

countdownlatch.await();

system.out.println("所有執行緒等待");}}

輸出: 所有執行緒等待

注意點:這裡不是等待所有執行緒都執行完畢後再執行countdownlatch.await();後的方法

而是等計數器歸0,即執行了countdownlatch.countdown();後,將記數器歸0,切記!

所以需要等執行緒都執行完畢後再執行,可以將countdownlatch.countdown()方法放在每個執行緒的最後!

場景:需要多個執行緒執行完畢/或者啟動某些執行緒後,才能執行後續**!

加法記數器:

主要方法:

1.構造方法,第乙個引數是從0加到多少時,會執行第二個引數中的方法

cyclicbarrier cyclicbarrier=new cyclicbarrier(7,()->{})

2.該方法,底層會呼叫--count,但是也會堵塞該執行緒,cyclicbarrier.await()後面的**會等cyclicbarrier條件滿足後再一起執行,看下執行結果!

cyclicbarrier.await();

樣例**如下:

public class cyclicbarrier_test );

for (int i = 0; i < 7; i++) catch (interruptedexception e) catch (brokenbarrierexception e)

},"執行緒:"+i).start();}}

}輸出: 召喚神龍成功!

執行緒:6等待完畢!

執行緒:0等待完畢!

執行緒:1等待完畢!

執行緒:2等待完畢!

執行緒:4等待完畢!

執行緒:3等待完畢!

執行緒:5等待完畢!

常用方法:類似於執行緒池的概念

1.獲取執行緒資源

semaphore.acquire();

2.釋放執行緒資源:

semaphore.release();

有兩個目的:

1.用於多種共享資源的互斥使用

2.用於併發執行緒的控制

樣例**如下:

public class semaphore_test catch (interruptedexception e) finally

},"執行緒"+i).start();}}

}輸出:

執行緒2得到車位,停2秒!

執行緒0得到車位,停2秒!

執行緒1得到車位,停2秒!

執行緒0開走了..

執行緒3得到車位,停2秒!

執行緒1開走了..

執行緒4得到車位,停2秒!

執行緒2開走了..

執行緒5得到車位,停2秒!

執行緒5開走了..

執行緒4開走了..

執行緒3開走了..

結論: 發現只能有3個執行緒同時訪問,其他的等待!

作用:1.多個共享資源互斥的使用!

2.併發限流,控制最大額執行緒數!

訊號量Semaphore(計數器)

計數訊號量用來控制同時訪問某個特定資源的運算元量或者同時執行某個指定操作的數量。可以用來實現資源池或者給容器加邊界。semaphore用來實現有邊界的容器 public class semaphoretest 有界容器 author hasee param static class boundedh...

計數器 智慧型計數器簡介

計數器主要是應用於電子科技領域,計數器是一種運用得比較多的時序邏輯電路。計數器可以對數字進行運算,它是一種沒有辦法顯示計算結果的顯示器。隨著電子科技的不斷發展,現在的計數器也實現了智慧型功能。智慧型計數器的出現幫助我們實現了很多高強度生產問題 複雜的技術問題,並且節約了生產成本和人力成本。智慧型計數...

計數器設計

最近看到一篇文章說要實現乙個計數器的功能,於是通過思索,設計了乙個靈活可用性高的物件計數器。裡面閃爍著 很多的火花。template class object counter object counter private static int m count template int object ...