這篇文章帶給大家的內容是關於Java中消費者問題的程式碼分析,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
public class Resource { //当前资源的数量 int num = 0; //当前资源的上限 int size = 10; //消费资源 public synchronized void remove() { //如果num为0,没有资源了,需要等待 while (num == 0) { try { System.out.println("消费者进入等待"); this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //如果线程可以执行到这里,说明资源里有资源可以消费 num--; System.out.println("消费者线程为:" + Thread.currentThread().getName() + "--资源数量:" + num); this.notifyAll(); } //生产资源 public synchronized void put() { //如果资源满了,就进入阻塞状态 while (num == size) { try { System.out.println("生产者进入等待"); this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } num++; System.out.println("生产者线程为:" + Thread.currentThread().getName() + "--资源数量:" + num); this.notifyAll(); } }
public class Consumer implements Runnable { private Resource resource; public Consumer(Resource resource) { this.resource = resource; } @Override public void run() { while (true){ resource.remove(); } } }
public class Producer implements Runnable { private Resource resource; public Producer(Resource resource){ this.resource=resource; } @Override public void run() { while (true){ resource.put(); } } }
public class TestConsumerAndProducer { public static void main(String[] args) { Resource resource = new Resource(); //生产线程 Producer p1 = new Producer(resource); //消费线程 Consumer c1 = new Consumer(resource); new Thread(p1).start(); new Thread(c1).start(); } }
# 相關推薦:
以上是Java中消費者問題的程式碼分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!