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

java生產者和消費者報告

劉柏宏1年前7瀏覽0評論

在Java編程中,生產者和消費者模式是一種常見的設計模式。這種模式一般用于解決線程間通信的問題,使得生產者產生的數據能夠被消費者及時地獲取和處理。

在這種模式中,生產者和消費者是兩個不同的線程,它們之間通過共享內存區域來實現數據的交換。生產者負責生產數據并將其存儲到共享區域,而消費者則從共享區域獲取數據并進行處理。為了防止多個線程同時訪問共享區域而產生沖突,需要使用鎖或者信號量進行加鎖和解鎖操作。

//Java中使用鎖和條件變量實現生產者和消費者模式的示例代碼如下:
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ProducerConsumer {
private Queuequeue = new LinkedList<>();
private final int CAPACITY = 5;
private Lock lock = new ReentrantLock();
private Condition notEmpty = lock.newCondition();
private Condition notFull = lock.newCondition();
private void produce(int num) throws InterruptedException {
lock.lock();
try {
while (queue.size() == CAPACITY) {
notFull.await();
}
queue.offer(num);
System.out.println("Produced: " + num);
notEmpty.signalAll();
} finally {
lock.unlock();
}
}
private void consume() throws InterruptedException {
lock.lock();
try {
while (queue.isEmpty()) {
notEmpty.await();
}
int num = queue.poll();
System.out.println("Consumed: " + num);
notFull.signalAll();
} finally {
lock.unlock();
}
}
public static void main(String[] args) throws InterruptedException {
ProducerConsumer pc = new ProducerConsumer();
Thread t1 = new Thread(() ->{
for (int i = 1; i<= 10; i++) {
try {
pc.produce(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread t2 = new Thread(() ->{
for (int i = 1; i<= 10; i++) {
try {
pc.consume();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t1.start();
t2.start();
t1.join();
t2.join();
}
}

該示例代碼中,我們使用Lock和Condition來實現鎖和條件變量。lock.lock()和lock.unlock()分別表示鎖定和解鎖操作。notEmpty.await()和notFull.await()分別表示等待非空和等待非滿狀態。當生產者調用produce方法時,如果隊列已滿,則調用notFull.await()等待。當消費者調用consume方法時,如果隊列為空,則調用notEmpty.await()等待。當生產者將數據存入隊列后,調用notEmpty.signalAll()通知消費者,當消費者從隊列取出數據后,調用notFull.signalAll()通知生產者。