日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

并发编程5-同步器

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并发编程5-同步器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Synchronizer

控制多個線程的流程,比如線程執行到某一個點的時候是等待還是通過。 JDK中自帶了信號量,關卡,閉鎖

閉鎖CoutDownLatch

達到最終狀態前是關閉的,所有線程在此阻塞, ?達到最終狀態后開放,并且不可以再修改,所有線程進入可運行狀態。 很適合,等待初始化, 等待依賴等等場景。 如: /*** 設置countDownLatch的初始值,* 用await()來等待* 用countDown來倒計時 --初始值* 當初始值為0時await()等待被notify*/ public class TestLatch {public static void main(String[] args) {final CountDownLatch latch = new CountDownLatch(1);final String[] datas = new String[3];new Thread(){@Overridepublic void run() {try {System.out.println("等待初始化");latch.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("初始化完成。開始執行");for (String data : datas) {System.out.println(data);}}}.start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}datas[0] = "我";datas[1] = "愛";datas[2] = "你";System.out.println("初始化完成");latch.countDown();} }

信號量?

適用于連接池等場景 /*** 創建一個含有固定許可數的信號量* 線程用acquire()標記獲得了一個許可,切許可-1,當許可為0時等待,* 用release來釋放許可,許可+1,其他等待的線程可以獲得許可了。*/ public class TestSemaphore {public static void main(String[] args) {final Semaphore semaphore = new Semaphore(5);for (int i = 0; i < 20; i++) {new Thread("thread" + i){@Overridepublic void run() {try {semaphore.acquire();} catch (InterruptedException e) {e.printStackTrace();}System.out.println(getName() + "正在執行");try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}semaphore.release();;}}.start();}} }

關卡

與閉鎖不同的是,閉鎖等待狀態,而關卡是等待線程。 特別適用于把一個計算拆分成多個進行計算,最后再進行整合。 /*** 關卡* 定義所有線程都到關卡之后的行為及關卡中包含的線程數量** 各個線程使用await方法來表示已經到這個關卡等著了** 當指定數目的線程等著了,那么就開放關卡, 所有線程及剛才定義的行為都繼續執行*/ public class TestBarrier {public static void main(String[] args) {final String[] friends = new String[]{"1", "2", "3"};final CyclicBarrier cyclicBarrier = new CyclicBarrier(3, new Runnable() {@Overridepublic void run() {System.out.println("出發");}});for (final String friend : friends) {new Thread(){@Overridepublic void run() {System.out.println(friend + "到集合點了");try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}System.out.println(friend + "出發");}}.start();}} }
打印如下: 1到集合點了 3到集合點了 2到集合點了 出發 2出發 3出發 1出發

總結

以上是生活随笔為你收集整理的并发编程5-同步器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。