Java多线程:生产者消费者问题

tech2025-12-23  7

问题描述

两个进程,生产者和消费者,生产者的作用是生成产品放到共享缓冲区中,消费者的作用是从共享缓冲区消耗产品。重复此过程。

思路

生产者生产,当buffer满了就阻塞,没满就+1,并唤醒其他线程。消费者消费,当buffer空了就阻塞,没空就-1,并唤醒其他线程。生产者消费者公用同一把锁。

代码

public class Demo { public volatile int buffer = 20; Object object = new Object(); class Producer implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (object) { while (buffer == 20) { try { object.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } buffer++; System.out.println(Thread.currentThread().getName() + ": 有" + buffer + "个资源"); object.notifyAll(); } } } } class Customer implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (object) { while (buffer == 0) { try { object.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } buffer--; System.out.println(Thread.currentThread().getName() + ": 有" + buffer + "个资源"); object.notifyAll(); } } } } public static void main(String[] args) { Demo demo = new Demo(); for (int i = 0; i <= 5; i++) { new Thread(demo.new Producer(), "Producer" + i).start(); new Thread(demo.new Customer(), "Customer" + i).start(); } } }
最新回复(0)