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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中常用的并发工具类

發(fā)布時(shí)間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中常用的并发工具类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

· 1. 等待多線程完成的CountDownLatch

構(gòu)造函數(shù)接收一個(gè)int類型的參數(shù)作為計(jì)數(shù)器,如果想等待N個(gè)點(diǎn),就傳入N。當(dāng)調(diào)用CountDownLatch的countDown方法時(shí),N就會減一,直至減為零。使用await方法等待,當(dāng)N的值變?yōu)榱?#xff0c;執(zhí)行await的線程繼續(xù)執(zhí)行。

public class CountDownTest {static CountDownLatch c = new CountDownLatch(2);static ExecutorService pool = Executors.newFixedThreadPool(2);public static void main(String agrs[]){pool.execute(new Runnable() {public void run() {try {TimeUnit.MILLISECONDS.sleep(3);}catch (InterruptedException e){e.printStackTrace();}System.out.println("This is A");c.countDown();}});pool.execute(new Runnable() {public void run() {try {TimeUnit.MILLISECONDS.sleep(3);}catch (InterruptedException e){e.printStackTrace();}System.out.println("This is B");c.countDown();}});try {c.await();}catch (InterruptedException e){}System.out.println("This is main");} }

2. 同步屏障CyclicBarrier

可循環(huán)使用的屏障。它要做的事情,讓一組線程到達(dá)屏障時(shí)被阻塞,直到最后一個(gè)線程到達(dá)屏障時(shí),屏障才會打開,所有被屏障攔截的線程才會繼續(xù)運(yùn)行。

默認(rèn)構(gòu)造方法CyclicBarrier(int parties),其參數(shù)表示屏障攔截的線程數(shù),每個(gè)線程調(diào)用await方法告訴CyclicBarrier已經(jīng)到達(dá)屏障,然后當(dāng)前線程阻塞。

public class CylicBarrierTest {static CyclicBarrier c = new CyclicBarrier(2);static ExecutorService pool = Executors.newFixedThreadPool(2);public static void main(String args[]){pool.execute(new Runnable() {public void run() {System.out.println("this is A");try {c.await();System.out.println("this is Aa");}catch (Exception e){e.printStackTrace();}}});pool.execute(new Runnable() {public void run() {System.out.println("this is B");try {c.await();System.out.println("this is Bb");}catch (Exception e){e.printStackTrace();}}});pool.shutdown();} }

3. CountDownLatch vs CyclicBarrier

CountDownLatch的計(jì)數(shù)器只使用一次,而CyclicBarrier的計(jì)數(shù)器可以使用reset方法重置,重復(fù)使用

4. 控制線程并發(fā)數(shù)的信號量 Semaphore

控制有限哥線程使用資源。使用方法 Semaphore ss = new Semaphore(N), N表示最大的并發(fā)量,每個(gè)線程使用資源前調(diào)用ss.acquire()方法獲取權(quán)限,使用完后調(diào)用ss.release()方法釋放權(quán)限。

5. 線程間的數(shù)據(jù)交換Exchanger

它提供一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn),兩個(gè)線程可以交換彼此的數(shù)據(jù)。

public class ExchangeTest {private static final Exchanger<String> exgr = new Exchanger<String>();private static ExecutorService pool = Executors.newFixedThreadPool(2);public static void main(String args[]){pool.execute(new Runnable() {public void run() {String A = "銀行流水A";try {A = exgr.exchange(A);System.out.println("A 當(dāng)前的值:" + A);}catch (InterruptedException e){}}});pool.execute(new Runnable() {public void run() {String B = "銀行流水B";try {B = exgr.exchange(B);System.out.println("B 當(dāng)前的值:" + B);}catch (InterruptedException e){}}});pool.shutdown();}

轉(zhuǎn)載于:https://www.cnblogs.com/graph/p/7086209.html

總結(jié)

以上是生活随笔為你收集整理的java中常用的并发工具类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。