这两天用到了多线程,于是重新复习了一下,并且模拟了
多线程的经典例子生产者和消费者的问题。
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多线程实现生产者和消费者
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
代码里面包含一个并发4个线程同时运行 全部开始 全部停止 单个停止还有点问题。 还有生产者消费者 里面的里面能帮助你理解多线程的运用!
java多线程编程实例 java多线程编程实例 (源程序)
java多线程编程实例
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
《Java多线程编程实例》随书源码《Java多线程编程实例》随书源码《Java多线程编程实例》随书源码
java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例
a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题
利用JAVA编写的多线程运行实例 压缩文件,可直接运行 ...利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能
java多线程编程实例源码,17章节,上百实例源码
这是Java多线程编程实例一书的全部随书源码,这本书是很早的JAVA多线程编程指导书,虽然很老但是很经典,直到现在还很热,很有参考价值。
描述java多线程的例子,可供进一步学习多线程的人参考
java多线程实现生产者消费者关系,完成线程之间的同步。
生产者消费者模式是java多线程经典的安全,它用到了同步,资源共享,wait,notify等技术。
java多线程小程序实例 java多线程小程序实例
由生产者/消费者问题看JAVA多线程,让我们更加的了解多线程问题