Java多线程同步问题:生产者与消费者的实战案例 原创 小咪咪 2024-10-15 01:06 33阅读 0赞 在Java中,我们可以使用synchronized关键字和线程池来实现生产者与消费者之间的实战案例。以下是一个基础的例子: 1. 生产者类(Producer): ```java import java.util.concurrent.*; public class Producer { private int count; private BlockingQueue<Integer> queue; public Producer(BlockingQueue<Integer> queue) { this.queue = queue; count = 0; } public synchronized void produce() { count++; System.out.println("Producer produced: " + count); if (count == 10) { // 假设生产了10个产品 System.out.println("Producer finished producing."); count = 0; // 清空计数器 } try { queue.put(count); // 将生产的产品放入队列 System.out.println("Product put into queue: " + count); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 2. 消费者类(Consumer): ```java import java.util.concurrent.*; public class Consumer { private int count; private BlockingQueue<Integer> queue; public Consumer(BlockingQueue<Integer> queue) { this.queue = queue; count = 0; } public synchronized void consume() { System.out.println("Consumer started consuming."); try { count = queue.take(); // 从队列中取出一个产品 System.out.println("Product consumed: " + count); if (count % 5 == 0) { // 假设消费者每消费5个产品会休息一下 System.out.println("Consumer resting after consuming."); Thread.sleep(1000); // 线程休眠,模拟休息 } System.out.println("Product consumed and put back into queue: " + count); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 3. 主程序: ```java import java.util.concurrent.*; public class Main { public static void main(String[] args) { BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10); // 初始化队列大小 Producer producer = new Producer(queue); Consumer consumer = new Consumer(queue); Thread producerThread = new Thread(producer, "Producer")); Thread consumerThread = new Thread(consumer, "Consumer")); producerThread.start(); // 开始生产者线程 consumerThread.start(); // 开始消费者线程 // 等待所有线程结束 producerThread.join(); consumerThread.join(); } } ``` 这个例子中,生产者不断地向队列(消费者可以访问的共享资源)添加产品,而消费者则从队列中取出产品并消费。当产品达到10个时,生产者会暂停,让消费者完成消费。 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 Java多线程同步问题:生产者-消费者模型 在Java中,生产者-消费者模型是一个经典的多线程同步问题。在这个模型中,生产者线程负责生成数据,而消费者线程负责消费这些数据。为了确保数据的一致性和线程安全,需要使用同步机制 朴灿烈づ我的快乐病毒、/ 2024年11月13日 23:56/ 0 赞/ 1 阅读
相关 Java多线程同步问题——生产者与消费者实战 在Java中,多线程的同步主要通过以下几种方式实现: 1. **synchronized关键字**: - `synchronized(this)`:锁定当前对象(这里是 待我称王封你为后i/ 2024年10月20日 09:09/ 0 赞/ 40 阅读
相关 Java多线程同步问题——生产者消费者模型示例 在Java中,生产者消费者模型是一个经典的并发问题,通过共享资源(缓冲区)和锁机制实现线程间的协调。 以下是一个简单的生产者消费者模型示例: ```java import 雨点打透心脏的1/2处/ 2024年10月19日 22:54/ 0 赞/ 32 阅读
相关 Java多线程同步:生产者消费者问题示例 在Java中,多线程的同步通常通过各种锁机制来实现,这里以经典的“生产者消费者”问题为例进行说明。 1. **类定义**: ```java // 生产者类 class Pro 喜欢ヅ旅行/ 2024年10月18日 19:18/ 0 赞/ 25 阅读
相关 Java多线程同步问题:生产者与消费者的实战案例 在Java中,我们可以使用synchronized关键字和线程池来实现生产者与消费者之间的实战案例。以下是一个基础的例子: 1. 生产者类(Producer): ```jav 小咪咪/ 2024年10月15日 01:06/ 0 赞/ 34 阅读
相关 Java多线程同步问题:生产者消费者模型 在Java中,生产者消费者模式通常通过阻塞队列(如`BlockingQueue`)和两个线程(生产者和消费者)来实现。下面是一个简单的例子: 1. 生产者类(Producer 落日映苍穹つ/ 2024年09月28日 01:24/ 0 赞/ 57 阅读
相关 Java线程同步问题:一个生产者消费者案例 在Java中,线程同步是通过各种锁(如synchronized关键字)实现的,以确保同一时间只有一个线程可以执行特定代码块。 下面是一个简单的生产者消费者案例,用到了sync 柔情只为你懂/ 2024年09月12日 21:27/ 0 赞/ 46 阅读
相关 多线程——消费者与生产者案例 生产者 package producer_consumer; public class producer implements Runnable{ 柔光的暖阳◎/ 2022年06月12日 15:11/ 0 赞/ 213 阅读
相关 线程同步之生产者与消费者问题 转载自:[http://blog.csdn.net/morewindows/article/details/7577591][http_blog.csdn.net_morewi 清疚/ 2021年12月20日 08:39/ 0 赞/ 236 阅读
还没有评论,来说两句吧...