Java生產者和消費者問題是指多個線程同時訪問共享資源時可能發生的一系列問題。假設多個生產者和多個消費者都需要同時訪問一個資源隊列,為了避免出現競爭、死鎖等問題,需要實現合適的線程同步機制。
public class ProducerConsumer { private List<String> sharedQueue = new LinkedList<>(); private int maxSize = 10; public void produce(String value) throws InterruptedException { synchronized (sharedQueue) { while (sharedQueue.size() == maxSize) { sharedQueue.wait(); } sharedQueue.add(value); sharedQueue.notifyAll(); } } public String consume() throws InterruptedException { synchronized (sharedQueue) { while (sharedQueue.isEmpty()) { sharedQueue.wait(); } String value = sharedQueue.remove(0); sharedQueue.notifyAll(); return value; } } }
以上是一個Java生產者消費者問題的解決方案,其中使用了synchronized同步塊以及wait()和notifyAll()方法來實現線程同步。
在本例中,生產者和消費者線程都需要訪問共享隊列sharedQueue。在生產者線程中,如果隊列已經滿,則調用wait()方法使線程等待,直到其他線程修改隊列并調用notifyAll()方法喚醒該線程。在消費者線程中,如果隊列為空,則調用wait()方法使線程等待,直到其他線程修改隊列并調用notifyAll()方法喚醒該線程。
這樣的線程同步機制可以避免競爭和死鎖等問題,確保生產者和消費者線程順暢地運行。