Java多线程同步问题——生产者消费者模型示例 原创 雨点打透心脏的1/2处 2024-10-19 22:54 34阅读 0赞 在Java中,生产者消费者模型是一个经典的并发问题,通过共享资源(缓冲区)和锁机制实现线程间的协调。 以下是一个简单的生产者消费者模型示例: ```java import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; class Buffer { private int data; private Lock lock = new ReentrantLock(); public synchronized void produce() { // 生产数据 if (data == 0) { System.out.println("Producer produced!"); data = 1; } else { System.out.println("Producer already produced!"); } } public synchronized void consume() { // 消费数据 if (data == 0) { System.out.println("Consumer consumed!"); data = 2; // 表示缓冲区已满 } else if (data == 1) { System.out.println("Consumer already consumed!"); } else { // 数据已满 System.out.println("Buffer is full!"); } } } public class ProducerConsumerExample { public static void main(String[] args) { Buffer buffer = new Buffer(); Thread producerThread = new Thread(new Producer(buffer))); Thread consumerThread1 = new Thread(new Consumer1(buffer))); Thread consumerThread2 = new Thread(new Consumer2(buffer))); producerThread.start(); consumerThread1.start(); consumerThread2.start(); // 等待所有线程完成 try { producerThread.join(); consumerThread1.join(); consumerThread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } } // 生产者线程,向缓冲区生产数据 static class Producer implements Runnable { private Buffer buffer; public Producer(Buffer buffer) { this.buffer = buffer; } @Override public void run() { while (true) { // 无限循环 buffer.produce(); // 生产数据 try { // 等待一定时间,模拟生产过程中的延迟 Thread.sleep(1000); // 挂起1秒 } catch (InterruptedException e) { e.printStackTrace(); } } } } // 消费者线程,向缓冲区消费数据 static class Consumer implements Runnable { private Buffer buffer; public Consumer(Buffer buffer) { this.buffer = buffer; } @Override public void run() { while (true) { // 无限循环 buffer.consume(); // 消费数据 try { // 等待一定时间,模拟消费过程中的延迟 Thread.sleep(1000); // 挂起1秒 } catch (InterruptedException e) { e.printStackTrace(); } } } } } ``` 在这个示例中,我们创建了一个Buffer类,它包含一个数据缓冲区和一个Lock对象。生产者线程(Producer)负责向缓冲区生产数据,而消费者线程(Consumer1, Consumer2)则负责从缓冲区消费数据。 在主线程中,我们启动了生产者线程、消费者线程1和消费者线程2,然后等待所有线程完成。 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 Java多线程同步问题:生产者-消费者模型 在Java中,生产者-消费者模型是一个经典的多线程同步问题。在这个模型中,生产者线程负责生成数据,而消费者线程负责消费这些数据。为了确保数据的一致性和线程安全,需要使用同步机制 朴灿烈づ我的快乐病毒、/ 2024年11月13日 23:56/ 0 赞/ 5 阅读
相关 Java多线程同步问题:生产者-消费者模型实例 在Java中实现生产者-消费者模型,我们可以使用synchronized关键字以及一些基本的数据结构如队列(LinkedList)。 下面是一个简单的例子: ```java ╰半夏微凉°/ 2024年10月20日 16:12/ 0 赞/ 28 阅读
相关 Java多线程同步问题:生产者-消费者模型解析 在Java中,生产者-消费者模型(Producer-Consumer Pattern)是一种常用的并发编程模型。它通过两个角色的交互来实现数据的生产与消费。 1. 生产者(P 曾经终败给现在/ 2024年10月20日 00:42/ 0 赞/ 28 阅读
相关 Java多线程同步问题——生产者消费者模型示例 在Java中,生产者消费者模型是一个经典的并发问题,通过共享资源(缓冲区)和锁机制实现线程间的协调。 以下是一个简单的生产者消费者模型示例: ```java import 雨点打透心脏的1/2处/ 2024年10月19日 22:54/ 0 赞/ 35 阅读
相关 Java多线程同步:生产者消费者问题示例 在Java中,多线程的同步通常通过各种锁机制来实现,这里以经典的“生产者消费者”问题为例进行说明。 1. **类定义**: ```java // 生产者类 class Pro 喜欢ヅ旅行/ 2024年10月18日 19:18/ 0 赞/ 25 阅读
相关 Java多线程同步问题:生产者消费者模型 在Java中,生产者消费者模式通常通过阻塞队列(如`BlockingQueue`)和两个线程(生产者和消费者)来实现。下面是一个简单的例子: 1. 生产者类(Producer 落日映苍穹つ/ 2024年09月28日 01:24/ 0 赞/ 57 阅读
相关 Java多线程同步问题:生产者-消费者模型实例 在Java中实现生产者-消费者模型,通常我们会使用`synchronized`关键字、`Lock`接口或者`ReentrantLock`类来实现线程同步。 以下是一个简单的例 我就是我/ 2024年09月10日 22:03/ 0 赞/ 80 阅读
相关 多线程生产者消费者模型 1. 基础知识: 1. 什么是生产者-消费者模式: 比如有两个进程A和B,它们共享一个固定大小的缓冲区,A进程产生数据放入缓冲区,B进程从缓冲区中取出数据进行计算, 我不是女神ヾ/ 2023年02月14日 13:10/ 0 赞/ 17 阅读
相关 【Java 多线程】简单生产者消费者模型 package LessonTwo; public class producerCustomer02 { public stati 忘是亡心i/ 2022年09月21日 01:03/ 0 赞/ 187 阅读
还没有评论,来说两句吧...