Java生產(chǎn)者和消費(fèi)者是非常常見(jiàn)的開(kāi)發(fā)模式,可以用于解決多線程數(shù)據(jù)交互的問(wèn)題。下面我們來(lái)看一下Java生產(chǎn)者和消費(fèi)者的一個(gè)例子。
public class Producer implements Runnable{ private final BlockingQueuesharedQueue; public Producer(BlockingQueue sharedQueue) { this.sharedQueue = sharedQueue; } @Override public void run() { for(int i=1; i<=10; i++){ try { System.out.println("Produced : " + i); sharedQueue.put(i); } catch (InterruptedException ex) { Logger.getLogger(Producer.class.getName()).log(Level.SEVERE, null, ex); } } } } public class Consumer implements Runnable{ private final BlockingQueue sharedQueue; public Consumer(BlockingQueue sharedQueue) { this.sharedQueue = sharedQueue; } @Override public void run() { while(true){ try { int item = sharedQueue.take(); System.out.println("Consumed : " + item); } catch (InterruptedException ex) { Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex); } } } } public class JavaProducerConsumer { public static void main(String[] args){ BlockingQueue sharedQueue = new LinkedBlockingQueue<>(); Producer producer=new Producer(sharedQueue); Consumer consumer=new Consumer(sharedQueue); new Thread(producer).start(); new Thread(consumer).start(); } }
以上代碼中,Producer是一個(gè)生產(chǎn)者類(lèi),用于向BlockingQueue中生產(chǎn)數(shù)據(jù)。Consumer則是一個(gè)消費(fèi)者,用于從BlockingQueue中消費(fèi)數(shù)據(jù)。JavaProducerConsumer類(lèi)則創(chuàng)建了共享隊(duì)列并實(shí)例化生產(chǎn)者和消費(fèi)者,并啟動(dòng)它們。
Java生產(chǎn)者和消費(fèi)者是一種非常有效的多線程數(shù)據(jù)交換方式,可以確保線程安全,同時(shí)提高程序的效率。