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

java生產者和消費者之間總結

陳怡靜1年前7瀏覽0評論

Java生產者和消費者模式是一種并發設計模式,旨在通過將一個或多個生產者與一個或多個消費者組合在一起,同時協調防止數據競爭和死鎖,從而實現數據交換

在Java中,生產者和消費者之間的數據傳遞通常通過使用共享緩沖區來實現。生產者將制造的數據存儲在緩沖區中,而消費者會從緩沖區中讀取數據。這種方法可以有效地控制數據流,從而避免競爭和死鎖。

以下是一個簡單的Java生產者和消費者的示例代碼:

public class Buffer {
private int contents;
private boolean available = false;
public synchronized int get() {
while (!available) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
available = false;
notifyAll();
return contents;
}
public synchronized void put(int value) {
while (available) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
contents = value;
available = true;
notifyAll();
}
}
public class Producer extends Thread {
private Buffer buffer;
public Producer(Buffer buffer) {
this.buffer = buffer;
}
public void run() {
for (int i = 1; i<= 10; i++) {
buffer.put(i);
System.out.println("Producer produced " + i);
try {
sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Consumer extends Thread {
private Buffer buffer;
public Consumer(Buffer buffer) {
this.buffer = buffer;
}
public void run() {
for (int i = 1; i<= 10; i++) {
int value = buffer.get();
System.out.println("Consumer consumed " + value);
try {
sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
Buffer buffer = new Buffer();
Producer producer = new Producer(buffer);
Consumer consumer = new Consumer(buffer);
producer.start();
consumer.start();
}
}

這段示例代碼中,Buffer類用于實現緩沖區。生產者Producer和消費者Consumer是兩個線程,Producer線程生產從1到10的整數數據并將它們存儲到Buffer中,而Consumer線程從Buffer中讀取數據并將其消耗掉。

在代碼示例中,Buffer類的put()和get()方法都使用synchronized關鍵字修飾,這樣可以確保緩沖區中的數據只能由一個線程進行讀取或寫入操作。此外,這兩個方法都使用了wait()和notifyAll()方法來防止死鎖和數據競爭。wait()方法將線程掛起,直到條件滿足;notifyAll()方法則喚醒所有等待在該條件上的線程。

最后,在Main類中創建了Buffer、Producer和Consumer對象,并在兩個線程中啟動它們。