Java生产者和消费者

    xiaoxiao2021-03-25  64

    /** * Created by wjz on 2017/3/12. */ public class Store { private final int MAX_SIZE; //仓库的最大容量 private int count; //当前的货物数量 public Store(int n) { MAX_SIZE = n; count = 0; } //往仓库加货物的方法 public synchronized void add() { while (count >= MAX_SIZE) { System.out.println("已经满了"); try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } count++; //打印当前仓库的货物数量 System.out.println(Thread.currentThread().toString() + "put" + count); this.notifyAll(); } //从仓库中拿走货物的方法 public synchronized void remove() { while(count <= 0) { System.out.println("空了"); try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().toString() + "get" + count); count--; //仓库还没装满,通知生产者添加货物 this.notify(); } public static void main(String[] args) { Store s = new Store(5); Thread pro = new Producer(s); Thread con = new Consumer(s); Thread pro2 = new Producer(s); Thread con2 = new Consumer(s); pro.setName("producer"); con.setName("consumer"); pro2.setName("producer2"); con2.setName("consumer2"); pro.start(); pro2.start(); con.start(); con2.start(); } } class Producer extends Thread { private Store s; public Producer(Store s) { this.s = s; } @Override public void run() { while(true) { s.add(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Consumer extends Thread { private Store s; public Consumer(Store s) { this.s = s; } @Override public void run() { while (true) { s.remove(); try { Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } } } } 其中wait()、notify()、notifyAll()都是native方法,需要加上synchronized关键字。
    转载请注明原文地址: https://ju.6miu.com/read-36462.html

    最新回复(0)