这两天用到了多线程,于是重新复习了一下,并且模拟了
多线程的经典例子生产者和消费者的问题。
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中,实现多线程有两种主要方式:通过实现`Runnable`接口或者继承`Thread`类。 首先,让我们从创建线程开始。当你...
总结来说,“java多线程(生产者与消费者)”是关于如何在Java中使用同步、线程间通信和共享资源来实现高效且安全的并发编程。通过理解并熟练应用这些概念和工具,开发者可以构建出能够充分利用多核处理器能力的高...
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
利用JAVA编写的多线程运行实例 压缩文件,可直接运行 ...利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行
### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
java多线程学习,生产者消费者问题示例
Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...
"生产者-消费者问题"是多线程编程中一个经典的同步问题,它涉及到资源的共享和线程间的协作。这个问题的核心在于如何有效地协调生产者线程(负责生产数据)和消费者线程(负责消费数据),使得生产与消费的过程既...
在Java多线程编程中,消费者-生产者模型是一种经典的线程间通信模式,用于解决多线程环境下的数据共享问题。该模型涉及到两个主要的角色:生产者(Producer)和消费者(Consumer)。生产者负责创建数据,而消费者则...