亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
它不建議使用
首頁 Java java教程 在Java並發(fā)中,CountDownLatch和CyclicBarrier之間的差異是什麼?

在Java並發(fā)中,CountDownLatch和CyclicBarrier之間的差異是什麼?

Sep 06, 2023 pm 03:33 PM
cyclicbarrier countdownlatch java並發(fā)

在Java並發(fā)中,CountDownLatch和CyclicBarrier之間的差異是什麼?

CountDownLatch 和 CyclicBarrier 都用於多執(zhí)行緒環(huán)境,並且它們都是多執(zhí)行緒環(huán)境的一部分。

根據(jù) Java Doc -

CountDownLatch - 允許一個或多個執(zhí)行緒等待的同步輔助工具直到其他執(zhí)行緒中執(zhí)行的一組操作完成。

CyclicBarrier - 一種同步輔助工具,允許一組執(zhí)行緒相互等待到達公共屏障點。

##1允許一組執(zhí)行緒的同步輔助全部等待彼此到達公共障礙點。 #一種允許一個或多個執(zhí)行緒的同步輔助工具等待其他執(zhí)行緒中執(zhí)行的一組操作完成。 2 可運行 tr>3可進階
先生。編號 Key CyclicBarrier CountDownLatch

#基本

它有一個可以提供Runnable 的建構(gòu)子。

它沒有這樣的建構(gòu)子

線程/任務(wù)

它維護執(zhí)行緒計數(shù)

它維護任務(wù)計數(shù)

4.

它不建議使用

######建議使用。 ##################5#########################如果一個執(zhí)行緒等待時被中斷,則所有其他等待執(zhí)行緒都會拋出B rokenBarrierException#############只有當(dāng)前執(zhí)行緒會拋出######InterruptedException,不會影響其他執(zhí)行緒####### ##############CyclicBarrier 範(fàn)例###
public class Main {
   public static void main(String args[]) throws InterruptedException {
      ExecutorService executors = Executors.newFixedThreadPool(4);
      CyclicBarrier cyclicBarrier = new CyclicBarrier(5);
      executors.submit(new Service1(cyclicBarrier));
      executors.submit(new Service1(cyclicBarrier));
      executors.submit(new Service2(cyclicBarrier));
      executors.submit(new Service2(cyclicBarrier));
      executors.submit(new Service2(cyclicBarrier));
      Thread.sleep(3000);
      System.out.println("Done");
   }
}
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Service1 implements Runnable {
   CyclicBarrier cyclicBarrier;
   public Service1(CyclicBarrier cyclicBarrier) {
      super();
      this.cyclicBarrier = cyclicBarrier;
   }
   @Override
   public void run() {
      System.out.println("Services1" + cyclicBarrier.getNumberWaiting());
      while (true) {
         try {
            cyclicBarrier.await();
         } catch (InterruptedException | BrokenBarrierException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
}
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Service2 implements Runnable {
   CyclicBarrier cyclicBarrier;
   public Service2(CyclicBarrier cyclicBarrier) {
      super();
      this.cyclicBarrier = cyclicBarrier;
   }
   @Override
   public void run() {
      System.out.println("Services2" + cyclicBarrier.getNumberWaiting());
      while (true) {
         try {
            cyclicBarrier.await();
         } catch (InterruptedException | BrokenBarrierException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
}
###CountDownLatch 範(fàn)例###
public class Main {
   public static void main(String args[]) throws InterruptedException {
      ExecutorService executors = Executors.newFixedThreadPool(4);
      CountDownLatch latch= new CountDownLatch(2);
      executors.submit(new Service1(latch));
      executors.submit(new Service2(latch));
      latch.await();
      System.out.println("Done");
   }
}
import java.util.concurrent.CountDownLatch;

public class Service1 implements Runnable {

   CountDownLatch latch;
   public Service1(CountDownLatch latch) {
      super();
      this.latch = latch;
   }

   @Override
   public void run() {
      try {
         Thread.sleep(20000);
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      latch.countDown();
      System.out.println("Services2"+latch.getCount());
   }
}
import java.util.concurrent.CountDownLatch;
public class Service2 implements Runnable {
   CountDownLatch latch;
   public Service2(CountDownLatch latch) {
      super();
      this.latch = latch;
   }
   @Override
   public void run() {
      try {
         Thread.sleep(20000);
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      latch.countDown();
      System.out.println("Services2"+latch.getCount());
   }
}
###

以上是在Java並發(fā)中,CountDownLatch和CyclicBarrier之間的差異是什麼?的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何在Java後端功能開發(fā)中處理並發(fā)存??? 如何在Java後端功能開發(fā)中處理並發(fā)存??? Aug 04, 2023 pm 08:22 PM

如何在Java後端功能開發(fā)中處理並發(fā)存???在現(xiàn)代網(wǎng)路應(yīng)用中,高並發(fā)存取是常見的挑戰(zhàn)。當(dāng)多個使用者同時存取後端服務(wù)時,如果不正確處理並發(fā),可能會導(dǎo)致資料一致性、效能和安全性等問題。這篇文章將介紹一些在Java後端開發(fā)中處理並發(fā)存取的最佳實務(wù)。 1.使用執(zhí)行緒同步Java提供了多種機制來處理並發(fā)訪問,其中最常用的是執(zhí)行緒同步。透過在關(guān)鍵程式碼區(qū)塊或方法前加入synch

反射機制在Java並發(fā)的應(yīng)用? 反射機制在Java並發(fā)的應(yīng)用? Apr 15, 2024 pm 09:03 PM

答:反射機制透過反射API允許Java程式在執(zhí)行時間檢查和修改類別和對象,在Java並發(fā)中可用於實現(xiàn)靈活的並發(fā)機制。應(yīng)用:動態(tài)創(chuàng)建線程。動態(tài)改變執(zhí)行緒優(yōu)先權(quán)。注入依賴。

Java函數(shù)的並發(fā)和多執(zhí)行緒中的Fork/Join框架如何使用? Java函數(shù)的並發(fā)和多執(zhí)行緒中的Fork/Join框架如何使用? Apr 27, 2024 am 10:09 AM

如何在Java中使用Fork/Join框架建立平行任務(wù)?定義任務(wù)邏輯,計算結(jié)果或執(zhí)行動作。建立ForkJoinPool管理並行執(zhí)行緒。使用fork()方法提交任務(wù)。使用join()方法取得任務(wù)結(jié)果。

如何解決:Java並發(fā)錯誤:死鎖偵測 如何解決:Java並發(fā)錯誤:死鎖偵測 Aug 25, 2023 pm 10:03 PM

如何解決:Java並發(fā)錯誤:死鎖偵測在多執(zhí)行緒程式設(shè)計中,死鎖是一個常見的問題。當(dāng)兩個或多個執(zhí)行緒互相等待對方釋放鎖資源時,就會發(fā)生死鎖。死鎖會導(dǎo)致執(zhí)行緒被阻塞,資源無法釋放,程式無法繼續(xù)執(zhí)行,進而導(dǎo)致系統(tǒng)故障。為了解決這個問題,Java提供了死鎖偵測機制。死鎖偵測是透過檢查線程之間的依賴關(guān)係和資源申請排隊情況來判斷是否存在死鎖的,一旦發(fā)現(xiàn)死鎖,系統(tǒng)可以採取相應(yīng)的

Java函數(shù)的並發(fā)和多執(zhí)行緒中的阻塞佇列作用是什麼? Java函數(shù)的並發(fā)和多執(zhí)行緒中的阻塞佇列作用是什麼? Apr 27, 2024 am 09:30 AM

阻塞佇列:並發(fā)和多執(zhí)行緒的強大工具阻塞佇列是一種執(zhí)行緒安全的佇列,在並發(fā)和多執(zhí)行緒程式設(shè)計中發(fā)揮以下關(guān)鍵作用:執(zhí)行緒同步:透過阻塞操作,防止?fàn)幱脳l件和資料不一致。資料緩衝:作為資料緩衝區(qū),緩解生產(chǎn)者和消費者執(zhí)行緒速度不匹配的問題。負載平衡:控制隊列中的元素數(shù)量,平衡生產(chǎn)者和消費者的負載。

Java中CyclicBarrier循環(huán)屏障怎麼應(yīng)用 Java中CyclicBarrier循環(huán)屏障怎麼應(yīng)用 May 12, 2023 pm 02:19 PM

一、簡介CyclicBarrier字面意思回環(huán)柵欄(循環(huán)屏障),它可以實現(xiàn)讓一組線程等待至某個狀態(tài)(屏障點)之後再全部同時執(zhí)行。叫做回環(huán)是因為當(dāng)所有等待線程都被釋放以後,CyclicBarrier可以被重複使用。 CyclicBarrier作用是讓一組執(zhí)行緒互相等待,當(dāng)達到一個共同點時,所有先前等待的執(zhí)行緒再繼續(xù)執(zhí)行,且CyclicBarrier功能可重複使用。二、CyclicBarrier的使用構(gòu)造方法://parties表示屏障攔截的線程數(shù)量,每個線程調(diào)用await方法告訴CyclicBarrier我

Java?CountDownLatch計數(shù)器與CyclicBarrier循環(huán)屏障怎麼定義 Java?CountDownLatch計數(shù)器與CyclicBarrier循環(huán)屏障怎麼定義 May 21, 2023 pm 06:25 PM

定義CountDownLatch:Asynchronizationaidthatallowsoneormorethreadstowaituntilasetofoperationsbeingperformedinotherthreadscompletes.CyclicBarrier:Asynchronizationaidthatallowsasetofthreadstoallwaitforeachothertoreachacommonbarrierclepoint.上述是Oracle簡單來說C

解決Java並發(fā)競態(tài)條件錯誤異常(ConcurrentRaceConditionErrorExceotion)的方法 解決Java並發(fā)競態(tài)條件錯誤異常(ConcurrentRaceConditionErrorExceotion)的方法 Aug 26, 2023 pm 12:57 PM

解決Java並發(fā)競態(tài)條件錯誤異常的方法競態(tài)條件是指多個執(zhí)行緒同時存取並修改共享資源時,最終結(jié)果的正確性受到執(zhí)行順序的影響。在Java中,當(dāng)多個執(zhí)行緒並發(fā)地存取共享資源時,如果沒有正確地使用同步機制,就會出現(xiàn)競態(tài)條件錯誤。當(dāng)發(fā)生競態(tài)條件錯誤時,程式可能會產(chǎn)生未預(yù)期的結(jié)果,甚至導(dǎo)致崩潰。本文將討論如何解決Java並發(fā)競態(tài)條件錯誤異常。一、使用同步機制最常見的解決競態(tài)

See all articles