Java多线程同步问题:生产者-消费者模型实例 原创 我就是我 2024-09-10 22:03 19阅读 0赞 在Java中实现生产者-消费者模型,通常我们会使用`synchronized`关键字、`Lock`接口或者`ReentrantLock`类来实现线程同步。 以下是一个简单的例子: 1. 创建一个商品类(Product)和两个队列(Queue): ```java import java.util.LinkedList; import java.util.Queue; public class Product { private String name; private int quantity; // getters and setters } ``` ```java class QueueImpl<T> implements Queue<T> { private LinkedList<T> list = new LinkedList<>(); @Override public synchronized boolean isEmpty() { return list.isEmpty(); } @Override public synchronized int size() { return list.size(); } @Override public synchronized T remove() { return list.removeFirst(); } // add methods } ``` 2. 创建生产者(Producer)和消费者(Consumer)类: ```java class Producer implements Runnable { private QueueImpl<Product> queue; public Producer(QueueImpl<Product> queue) { this.queue = queue; } @Override public void run() { for (int i = 0; i < 10; i++) { Product product = new Product("Product " + i, i * 2)); queue.add(product); System.out.println("Producer added product: " + product.getName()); try { Thread.sleep(500); // sleep for a moment } catch (InterruptedException e) { e.printStackTrace(); } } } } class Consumer implements Runnable { private QueueImpl<Product> queue; public Consumer(QueueImpl<Product> queue) { this.queue = queue; } @Override public void run() { while (!queue.isEmpty()) { Product product = queue.removeFirst(); System.out.println("Consumer removed product: " + product.getName()); try { Thread.sleep(1000); // sleep for a moment } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` 3. 运行生产者和消费者线程: ```java public class Main { public static void main(String[] args) { QueueImpl<Product> queue = new QueueImpl<>(); Producer producer = new Producer(queue); Consumer consumer = new Consumer(queue); // 创建并启动线程 Thread producerThread = new Thread(producer); producerThread.start(); Thread consumerThread = new Thread(consumer); consumerThread.start(); try { // 等待所有线程执行完毕 producerThread.join(); consumerThread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 这样,生产者和消费者就可以通过队列进行同步通信了。 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 Java多线程同步问题:生产者-消费者模型实例 在Java中实现生产者-消费者模型,通常我们会使用`synchronized`关键字、`Lock`接口或者`ReentrantLock`类来实现线程同步。 以下是一个简单的例 我就是我/ 2024年09月10日 22:03/ 0 赞/ 20 阅读
相关 Java多线程(九):生产者消费者模型 生产者消费者模型 生产者:生产任务的个体; 消费者:消费任务的个体; 缓冲区:是生产者和消费者之间的媒介,对生产者和消费者解耦。 当 缓冲区元素为满,生产 水深无声/ 2023年08月17日 15:16/ 0 赞/ 99 阅读
相关 java多线程:线程间通信——生产者消费者模型 一、背景 && 定义 多线程环境下,只要有并发问题,就要保证数据的安全性,一般指的是通过 synchronized 来进行同步。 另一个问题是,多个线程之间如何协作呢? 亦凉/ 2022年11月29日 05:34/ 0 赞/ 168 阅读
相关 Java多线程——生产者/消费者问题 文章目录 经典例题:生产者/消费者问题 分析: 代码示例 Product.java Produc 痛定思痛。/ 2022年11月12日 13:54/ 0 赞/ 213 阅读
相关 【Java 多线程】简单生产者消费者模型 package LessonTwo; public class producerCustomer02 { public stati 忘是亡心i/ 2022年09月21日 01:03/ 0 赞/ 146 阅读
相关 Java多线程—生产者-消费者问题 public class CubbyHole { private int seq; //数据 private boolean available 川长思鸟来/ 2022年07月15日 11:24/ 0 赞/ 194 阅读
相关 Java多线程—生产者-消费者问题 public class CubbyHole { private int seq; //数据 private boolean available 太过爱你忘了你带给我的痛/ 2022年07月15日 11:24/ 0 赞/ 208 阅读
相关 Java多线程14:生产者/消费者模型 转自:http://www.cnblogs.com/xrq730/p/4855663.html 什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制。生产 旧城等待,/ 2022年05月25日 07:39/ 0 赞/ 144 阅读
相关 多线程_生产者消费者问题 什么是多线程的生产者-消费者问题 当一个或者多个线程只负责往"数据缓冲区"中添加数据,而一个或者多个线程只负责从"数据缓冲区"中 取数据时可能造成的存数据时数据缓冲区满, 客官°小女子只卖身不卖艺/ 2021年07月24日 22:47/ 0 赞/ 427 阅读
还没有评论,来说两句吧...