1.资源
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(); } }
2.消费者
public class Consumer implements Runnable { private Resource resource; public Consumer(Resource resource) { this.resource = resource; } @Override public void run() { while (true){ resource.remove(); } } }
3.生产者
public class Producer implements Runnable { private Resource resource; public Producer(Resource resource){ this.resource=resource; } @Override public void run() { while (true){ resource.put(); } } }
4.测试
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中文网其它相关文章!
声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理