多线程编程实践——实现生产者消费者模型
Posted binye-typing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程编程实践——实现生产者消费者模型相关的知识,希望对你有一定的参考价值。
class Clerk { private int products; private int maximum; // 最大储货量 public Clerk(int maxmum) { this.maximum = maxmum; } public synchronized void addProduct() { if (products >= maximum) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { products++; System.out.println(Thread.currentThread().getName() + "到货第 " + products + "个产品"); notifyAll(); } } public synchronized void saleProduct() { if (products > 0) { System.out.println(Thread.currentThread().getName() + "买走第 " + products + "个产品"); products--; notifyAll(); } else { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Producer implements Runnable{ private Clerk clerk; public Producer(Clerk clerk) { this.clerk = clerk; } public void run() { while (true) { clerk.addProduct(); try { Thread.currentThread().sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Consumer implements Runnable { private Clerk clerk; public Consumer(Clerk clerk) { this.clerk = clerk; } public void run() { while (true) { clerk.saleProduct(); try { Thread.currentThread().sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * Created by bruce on 2018/7/22. */ public class ProducerAndConsumer { public static void main(String[] args) { Clerk clerk = new Clerk(20); Thread t1 = new Thread(new Producer(clerk)); Thread t2 = new Thread(new Consumer(clerk)); Thread t3 = new Thread(new Consumer(clerk)); Thread t4 = new Thread(new Consumer(clerk)); t1.setName("生产者"); t2.setName("消费者1"); t3.setName("消费者2"); t4.setName("消费者3"); t1.start(); t2.start(); t3.start(); t4.start(); } }
以上是关于多线程编程实践——实现生产者消费者模型的主要内容,如果未能解决你的问题,请参考以下文章