java怎么实现生产者消费者模型

avatar
作者
猴君
阅读量: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();     } } 

运行上述代码,可以看到生产者和消费者线程交替执行,生产者生产商品放入共享队列,消费者从共享队列取出商品。这样就实现了一个简单的生产者消费者模型。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!