Java中生產者和消費者模式是常用的線程同步技術之一,常用于解決多線程間的協調和通信問題。下面我將以一個簡單的例子來介紹該模式。
public class ProducerConsumer{ private static ListdataList = new ArrayList<>(); private static final int MAX_SIZE = 10; public static void main(String[] args){ new Producer().start(); new Consumer().start(); } static class Producer extends Thread{ @Override public void run(){ while (true){ synchronized (dataList){ if (dataList.size() >= MAX_SIZE){ try { dataList.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("生產者生產一個數據"); int data = new Random().nextInt(); dataList.add(data); dataList.notifyAll(); } } } } static class Consumer extends Thread{ @Override public void run(){ while (true){ synchronized (dataList){ if (dataList.size()<= 0){ try { dataList.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } int data = dataList.remove(0); System.out.println("消費者消費一個數據:" + data); dataList.notifyAll(); } } } } }
以上代碼定義了兩個線程,Producer負責生產數據,Consumer負責消費數據,數據以List集合保存,在生產者生產數據時,如果List集合已滿,則生產者線程調用wait方法等待,直到消費者消費數據造成List不滿時,生產者才開始生產數據并喚醒消費者線程。在消費者消費數據時,如果List集合為空,則消費者線程調用wait方法等待,直到生產者生產數據造成List不為空時,消費者才開始消費數據并喚醒生產者線程。
下一篇css中給背景定位