`
minzaipiao
  • 浏览: 148579 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

再现java多线程的经典实例===生产者和消费者的问题

    博客分类:
  • Java
阅读更多
这两天用到了多线程,于是重新复习了一下,并且模拟了
多线程的经典例子生产者和消费者的问题。

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)
			{
			}
		}
	}
}
0
0
分享到:
评论
1 楼 east_java 2009-08-25  
有问题的代码

相关推荐

    java多线程经典模型生产者消费者

    java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    java多线程实现生产者和消费者

    在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...

    java 多线程并发实例

    - 生产者-消费者模型:这是一个经典的多线程设计模式,用于解决资源的生产与消费问题。生产者线程负责生成数据,放入缓冲区;消费者线程则负责取出数据进行处理。Java的BlockingQueue接口(如ArrayBlockingQueue)...

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

    Java多线程实现生产者消费者

    本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    Java多线程编程实例

    wait()和notify()配合使用,可以让线程进入等待状态并等待其他线程的通知,通常在解决生产者消费者问题时会用到。ReentrantLock是可重入锁,提供了与synchronized相似的功能,但更灵活,支持公平锁和非公平锁,还有...

    java多线程编程实例_Source

    通过这些实例,学习者能够深入理解Java多线程编程,提高解决实际并发问题的能力。每个章节的源码都是一个独立的案例,可以逐一研究,实践和调试,以便更好地掌握Java多线程编程技巧。在学习过程中,结合理论知识与...

    java多线程实现生产者消费者关系

    此外,`TestThread3.java`可能是测试此类模型的具体实现,它通常会创建多个生产者和消费者线程实例,并启动它们。每个线程会根据其角色调用相应的`produce()`或`consume()`方法。 在实际开发中,除了使用...

    JAVA多线程的实例

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过实现`Runnable`接口或者继承`Thread`类。 首先,让我们从创建线程开始。当你...

    java多线程(生产者与消费者)

    总结来说,“java多线程(生产者与消费者)”是关于如何在Java中使用同步、线程间通信和共享资源来实现高效且安全的并发编程。通过理解并熟练应用这些概念和工具,开发者可以构建出能够充分利用多核处理器能力的高...

    java多线程实现生产者消费者问题

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    JAVA多线程实例 可直接下载

    利用JAVA编写的多线程运行实例 压缩文件,可直接运行 ...利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行

    由生产者/消费者问题看JAVA多线程

    ### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    java多线程生产者消费者问题示例

    java多线程学习,生产者消费者问题示例

    java 多线程 生产者消费者模式

    Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...

    多线程实例,关于生产者与消费者的问题

    "生产者-消费者问题"是多线程编程中一个经典的同步问题,它涉及到资源的共享和线程间的协作。这个问题的核心在于如何有效地协调生产者线程(负责生产数据)和消费者线程(负责消费数据),使得生产与消费的过程既...

    java多线程_消费者与生产者模型

    在Java多线程编程中,消费者-生产者模型是一种经典的线程间通信模式,用于解决多线程环境下的数据共享问题。该模型涉及到两个主要的角色:生产者(Producer)和消费者(Consumer)。生产者负责创建数据,而消费者则...

Global site tag (gtag.js) - Google Analytics