在Java中,生產者和消費者模式非常常見。它是一種解決多線程并發問題的經典方法。在編寫代碼處理表數據時,也可以采用生產者和消費者的方式去處理。
public class ProducerConsumer { public static void main(String[] args) { //生產者線程 Producer producer = new Producer(); //消費者線程 Consumer consumer = new Consumer(producer); //啟動線程 new Thread(producer).start(); new Thread(consumer).start(); } } //生產者類 class Producer implements Runnable { private Table table; public Producer() { this.table = new Table(); } @Override public void run() { for (int i = 1; i<= 100; i++) { table.put(String.valueOf(i)); } } } //消費者類 class Consumer implements Runnable { private Table table; public Consumer(Table table) { this.table = table; } @Override public void run() { while (true) { String data = table.get(); System.out.println(data); if (data.equals("100")) { System.exit(0); } } } } //表類 class Table { private LinkedListdataList; public Table() { this.dataList = new LinkedList (); } //放入數據 public synchronized void put(String data) { while (dataList.size() >= 10) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } notify(); dataList.add(data); } //獲取數據 public synchronized String get() { while (dataList.isEmpty()) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } notify(); return dataList.removeFirst(); } }
在示例代碼中,首先定義了生產者類、消費者類和表類。生產者類用于向表中添加數據,即 put() 方法,消費者類用于從表中取出數據,即 get() 方法。當表中沒有數據時,消費者線程將進入等待狀態。當表中數據數量達到上限時,生產者線程將進入等待狀態。
在 main 方法中,創建了生產者線程和消費者線程,并啟動兩個線程。當所有數據處理完成后,消費者線程可以退出。在本示例中,當取出的數據為 100 時,消費者線程將結束。
下一篇css中調用js特效