欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java閉鎖和柵欄

吉茹定1年前5瀏覽0評論

Java閉鎖(CountDownLatch)和柵欄(CyclicBarrier)是兩種常用的線程同步工具。它們都可以用來協調多個線程的執行順序,保證線程的正確性。下面我們來詳細介紹一下這兩種工具。

1. Java閉鎖

public class CountDownLatch {
public CountDownLatch(int count) {  }
public void await() throws InterruptedException {  }
public void countDown() {  }
}

CountDownLatch是一種線程同步工具,它可以通過一個計數器來控制多個線程的執行。其中,計數器的初始值由用戶指定,在多個線程執行完成后自動減一,當計數器的值為0時,await()方法就會釋放所有等待線程的鎖。

下面是一個簡單的例子:

public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(3);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("線程1執行完成");
countDownLatch.countDown();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("線程2執行完成");
countDownLatch.countDown();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("線程3執行完成");
countDownLatch.countDown();
}
}).start();
countDownLatch.await();
System.out.println("所有線程執行完成");
}
}

輸出:

線程3執行完成
線程2執行完成
線程1執行完成
所有線程執行完成

2. Java柵欄

public class CyclicBarrier {
public CyclicBarrier(int parties, Runnable barrierAction) {  }
public int await() throws InterruptedException, BrokenBarrierException {  }
}

CyclicBarrier是一種線程同步工具,它可以讓一組線程在同一個時間點上達到同步點。其中,parties指定了需要同步的線程個數,當所有線程都調用了await()方法后,barrierAction就會被執行。

下面是一個簡單的例子:

public class CyclicBarrierDemo {
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(3, new Runnable() {
@Override
public void run() {
System.out.println("所有線程執行完成");
}
});
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("線程1執行完成");
try {
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("線程2執行完成");
try {
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("線程3執行完成");
try {
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}).start();
}
}

輸出:

線程1執行完成
線程2執行完成
線程3執行完成
所有線程執行完成

總結

CountDownLatch和CyclicBarrier都是很有用的線程同步工具,它們各有優點。CountDownLatch更適合一組線程等待另一組線程的任務執行完成,而CyclicBarrier更適合一組線程協作完成某個任務。