实体
//教材
public class Book {
private int id;
public Book(int id) {
this.id = id;
}
@Override
public String toString() {
return "教材" + id;
}
}
仓库
public class ChangKu {
//仓库大小
private int index = 0;
Book[] booklist = new Book[10];
//同步入库
public synchronized void put(Book book) {
if (index >= 9) {
try {
System.out.println("仓库满了,等待取教材");
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
booklist[index] = book;
index++;
this.notify();
}
//同步出库
public synchronized Book get() {
if (index == 0) {
try {
System.out.println("仓库空了,等待存教材");
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Book book = booklist[--index];
this.notify();
return book;
}
}
生产者
import java.util.Random;
public class Producer implements Runnable {
ChangKu ck = null;
public Producer(ChangKu ck) {
this.ck = ck;
}
public void run() {
while (true) {
Book book = new Book((int) (Math.random() * 1000));
ck.put(book);
System.out.println("放入:" + book);
}
}
}
消费者
public class Consumer implements Runnable {
ChangKu ck = null;
public Consumer(ChangKu ck) {
this.ck = ck;
}
public void run() {
while (true) {
Book book = ck.get();
System.out.println("ȡ��取出" + book);
}
}
}
测试
public class TestPC {
public static void main(String[] args) {
ChangKu ck = new ChangKu();
Producer pd = new Producer(ck);
Consumer cs = new Consumer(ck);
//生成线程
Thread producer = new Thread(pd);
//消费线程
Thread consumer = new Thread(cs);
producer.setName("put");
consumer.setName("get");
producer.start();
consumer.start();
}
}
分享到:
相关推荐
### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...
在我们的例子中,有一个生产者和两个消费者,这意味着数据生成的速度和消费的速度是不同的,需要通过多线程来协调它们之间的交互。 为了实现这个模式,我们需要确保以下条件得到满足: 1. **互斥访问**:当生产者...
生产者-消费者问题是一个典型的同步问题,旨在展示如何在共享资源之间协调两个或更多线程的活动。在这个模型中,我们有两个主要的角色:生产者和消费者。生产者负责创建或生产数据,而消费者则负责处理这些数据。...
【生产者消费者问题】是多线程编程中的经典问题,主要涉及到进程同步和互斥的概念。在操作系统中,生产者负责生成数据,而消费者则负责消耗这些数据。两者通过一个有限大小的缓冲区进行交互,当缓冲区满时,生产者...
9. **测试与调试**:多线程问题往往难以复现,因此在编写生产者-消费者代码时,应编写充分的测试用例,包括边界情况,如缓冲区满和空的状态转换。 通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者...
生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区,导致缓冲区的数据混乱和不一致的问题。 在解决生产者-消费者问题时,需要使用同步机制来...
生产者-消费者问题是多线程同步的一个经典案例,主要探讨如何在并发环境下,确保生产者进程和消费者进程之间正确地共享资源,避免数据竞争和死锁。在这个问题中,生产者进程负责创建产品并将产品放入缓冲区,而消费...
本篇文章将详细解析一个基于Linux环境下的多线程示例程序,该程序通过生产者消费者模型实现数据的生产和消费过程。 #### 一、程序背景与目的 生产者消费者模型是多线程编程中的一个经典案例,主要用于解决资源竞争...
通过分析和理解这段代码,我们可以更好地掌握多线程编程和并发控制的概念,这对于理解和优化多线程应用程序至关重要。同时,这也是操作系统课程中的一个重要实践环节,帮助学生理论联系实际,提升解决实际问题的能力...
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
本文将详细地阐述 Linux 下利用互斥锁、条件变量、线程管理等相关函数实现多线程生产者-消费者问题,以提高资源利用率。 线程基本概念 线程是进程的一条执行路径,它包含独立的堆栈和 CPU 寄存器状态,每个线程...
生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下。在这个模式中,生产者负责生成数据并放入共享的数据结构(如队列),而消费者则从这...
示例代码展示了一个简单的多线程程序,其中包含了生产者线程和消费者线程的创建过程。具体来说: 1. **生产者线程** (`producer` 函数): 当线程ID为偶数时创建。此线程仅打印出一条消息“`MyThreadfirst`”,然后...
"生产者-消费者"模型是多线程问题中的经典案例,它揭示了如何通过线程间的协作来实现数据共享和高效利用资源。今天我们将深入探讨这个主题。 生产者-消费者模型是由两个主要角色构成:生产者和消费者。生产者负责...
本话题将深入探讨一个经典的多线程问题——“生产者-消费者”模型,以及如何在VC++环境下利用信号和互斥量来解决这个问题。 生产者-消费者问题是一个典型的同步问题,涉及两个或多个线程之间的协作:生产者线程负责...
在IT领域,多线程间通信是并发编程中的重要概念,尤其在服务器端应用和高并发系统中。本文将深入探讨“多生产者-多消费者”模式,这是一种经典的线程同步问题,旨在优化资源的利用和提高系统的效率。在这个模式中,...
设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区...
"生产者-消费者"模式是多线程编程中的一个经典设计模式,它体现了线程间的协作和同步。在这个模式中,"生产者"线程负责创建资源,而"消费者"线程则负责消耗这些资源。这个模式在实际应用中非常常见,例如在消息队列...