色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java 信號量 和閉鎖

洪振霞2年前8瀏覽0評論

Java 中的信號量和閉鎖都是多線程編程中常用的輔助工具,可以協調線程之間的執行順序和互斥訪問共享資源。

public class Semaphore {
private final int permits;
private final boolean fair;
private final Dequequeue;
private int count;
public Semaphore(int permits, boolean fair) {
this.permits = permits;
this.fair = fair;
this.queue = new LinkedList<>();
this.count = 0;
}
public Semaphore(int permits) {
this(permits, false);
}
public synchronized void acquire() throws InterruptedException {
queue.addLast(Thread.currentThread());
while (queue.getFirst() != Thread.currentThread() || count == permits) {
wait();
}
queue.removeFirst();
count++;
}
public synchronized void release() {
count--;
notifyAll();
}
}

信號量是一種控制訪問有限資源的機制,允許同時有多個線程訪問同一個資源,但是要限制資源被訪問的個數。Java 的信號量實現類 Semaphore 就是一種常見的工具類,其中 permits 表示許可的數量,fair 表示是否公平地分配許可,queue 就是保存等待線程的隊列,count 就是當前可用的許可數量。acquire 方法表示線程獲得許可的操作,如果沒有許可可用,則線程將會阻塞在隊列中,等待其它線程的許可釋放,直到自己成為隊列首部的線程,此時才能獲得許可并執行操作。release 方法表示線程釋放許可的操作,喚醒等待隊列中的線程,并將許可數量加一。

public class CountDownLatch {
private final int count;
private volatile int remaining;
public CountDownLatch(int count) {
this.count = count;
this.remaining = count;
}
public synchronized void await() throws InterruptedException {
while (remaining >0) {
wait();
}
}
public synchronized void countDown() {
if (remaining >0) {
remaining--;
}
if (remaining == 0) {
notifyAll();
}
}
}

閉鎖是一種等待一組操作完成的機制,將需要等待的操作數量設置為 count,每當一個操作完成后,就調用 countDown 方法將計數器減一。當計數器為零時,await 方法將會返回,表示所有操作已經完成。Java 的閉鎖實現類 CountDownLatch 就是一種常見的工具類,其中 count 就是需要等待的操作數量,remaining 就是當前還未完成的操作數量。await 方法表示線程等待操作完成的操作,如果還有未完成的操作,則線程將會阻塞,直到所有的操作都已經完成。countDown 方法表示操作完成的操作,將 remaining 減一,并喚醒等待的線程。