阅读量:0
在Java中,生产者消费者模型可以通过使用线程同步机制(如synchronized关键字、Lock接口、Semaphore信号量等)和wait()、notifyAll()等待通知机制实现。这里给出一个简单的示例,使用synchronized关键字和wait()、notifyAll()方法实现生产者消费者模型。
首先,创建一个共享资源类(共享队列):
import java.util.LinkedList; import java.util.Queue; public class SharedQueue { private Queue<Integer> queue = new LinkedList<>(); public synchronized void add(int item) { while (queue.size() == 10) { try { wait(); // 当前线程等待,释放锁 } catch (InterruptedException e) { e.printStackTrace(); } } queue.add(item); notifyAll(); // 当前线程通知其他线程 } public synchronized int remove() { while (queue.isEmpty()) { try { wait(); // 当前线程等待,释放锁 } catch (InterruptedException e) { e.printStackTrace(); } } int item = queue.poll(); notifyAll(); // 当前线程通知其他线程 return item; } }
接下来,创建生产者和消费者线程类:
public class Producer implements Runnable { private SharedQueue sharedQueue; public Producer(SharedQueue sharedQueue) { this.sharedQueue = sharedQueue; } @Override public void run() { for (int i = 0; i < 20; i++) { sharedQueue.add(i); System.out.println("生产者生产了: " + i); try { Thread.sleep(100); // 模拟生产耗时 } catch (InterruptedException e) { e.printStackTrace(); } } } } public class Consumer implements Runnable { private SharedQueue sharedQueue; public Consumer(SharedQueue sharedQueue) { this.sharedQueue = sharedQueue; } @Override public void run() { for (int i = 0; i < 20; i++) { int item = sharedQueue.remove(); System.out.println("消费者消费了: " + item); try { Thread.sleep(200); // 模拟消费耗时 } catch (InterruptedException e) { e.printStackTrace(); } } } }
最后,在主类中创建生产者和消费者线程并启动:
public class Main { public static void main(String[] args) { SharedQueue sharedQueue = new SharedQueue(); Producer producer = new Producer(sharedQueue); Consumer consumer = new Consumer(sharedQueue); Thread producerThread = new Thread(producer); Thread consumerThread = new Thread(consumer); producerThread.start(); consumerThread.start(); } }
运行上述代码,可以看到生产者和消费者线程交替执行,生产者生产商品放入共享队列,消费者从共享队列取出商品。这样就实现了一个简单的生产者消费者模型。