这两天用到了多线程,于是重新复习了一下,并且模拟了
多线程的经典例子生产者和消费者的问题。
Mobile 生产者生成的手机
SyncStack 用数组实现的栈 包括两个同步方法push (生产手机)和pop(消费手机)
两个实现了Runnable接口的线程类 生产者(Producer)和消费者 (Consumer)
public class ProducerConsumer
{
public static void main(String[] args)
{
SyncStack ss = new SyncStack();
Producer p = new Producer(ss);
Consumer c = new Consumer(ss);
new Thread(p).start();
new Thread(c).start();
}
}
class Mobile{
int id;
Mobile(int id){
this.id = id;
}
public String toString(){
return "手机:" +id;
}
}
class SyncStack{
int index = 0;
Mobile[] arrayMobile = new Mobile[6];
public synchronized void push(Mobile apple){
if(index == arrayMobile.length){
try
{
//生产完了,进行等待
this.wait();
}
catch (InterruptedException e)
{
}
}
//通知消费者消费
this.notify();
arrayMobile[index] = apple;
index ++;
}
public synchronized Mobile pop(){
if(index == 0){
try
{
//消费完了,进行等待
this.wait();
}
catch (InterruptedException e)
{
}
}
//通知生产者生产
this.notify();
index --;
return arrayMobile[index];
}
}
class Producer implements Runnable{
SyncStack ss = null;
Producer(SyncStack ss){
this.ss = ss;
}
public void run()
{
for(int i=0; i<20; i++){
Mobile m = new Mobile(i);
ss.push(m);
System.out.println("生产了"+m);
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
}
}
}
class Consumer implements Runnable{
SyncStack ss = null;
Consumer(SyncStack ss){
this.ss = ss;
}
public void run(){
for(int i=0; i<20; i++){
Mobile m = ss.pop();
System.out.println("消费了"+m);
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
}
}
}
分享到:
相关推荐
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
- 生产者-消费者模型:这是一个经典的多线程设计模式,用于解决资源的生产与消费问题。生产者线程负责生成数据,放入缓冲区;消费者线程则负责取出数据进行处理。Java的BlockingQueue接口(如ArrayBlockingQueue)...
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...
wait()和notify()配合使用,可以让线程进入等待状态并等待其他线程的通知,通常在解决生产者消费者问题时会用到。ReentrantLock是可重入锁,提供了与synchronized相似的功能,但更灵活,支持公平锁和非公平锁,还有...
通过这些实例,学习者能够深入理解Java多线程编程,提高解决实际并发问题的能力。每个章节的源码都是一个独立的案例,可以逐一研究,实践和调试,以便更好地掌握Java多线程编程技巧。在学习过程中,结合理论知识与...
此外,`TestThread3.java`可能是测试此类模型的具体实现,它通常会创建多个生产者和消费者线程实例,并启动它们。每个线程会根据其角色调用相应的`produce()`或`consume()`方法。 在实际开发中,除了使用...
总结来说,“java多线程(生产者与消费者)”是关于如何在Java中使用同步、线程间通信和共享资源来实现高效且安全的并发编程。通过理解并熟练应用这些概念和工具,开发者可以构建出能够充分利用多核处理器能力的高...
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题
利用JAVA编写的多线程运行实例 压缩文件,可直接运行 ...利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行
### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
在Java编程中,多线程是并发处理任务的关键机制,而生产者-消费者问题是多线程编程中的一个经典模型。这个模型描述了两个角色:生产者(Producer)负责创建资源,消费者(Consumer)则负责消耗这些资源。为了解决...
在Java多线程编程中,消费者-生产者模型是一种经典的线程间通信模式,用于解决多线程环境下的数据共享问题。该模型涉及到两个主要的角色:生产者(Producer)和消费者(Consumer)。生产者负责创建数据,而消费者则...
Java多线程中的生产者-消费者模式是一种典型的同步与协作模型,它用于解决在多线程环境下资源的有效利用和协调问题。在这个模式中,通常有两个角色:生产者和消费者。生产者负责创建产品,而消费者则负责消费这些...
生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...
基本满足操作系统课上要求,java实现的生产者消费者模型。
JAVA多线程实现生产者消费者模型是指使用JAVA编程语言和多线程技术来实现生产者消费者模型的实例详解。这种模型可以提高系统的并发性和性能,但需要合理地设计和实现线程安全和协作关系。 知识点: 1. 生产者消费...