您的位置:首页 > 编程语言 > Java开发

java实现生产者消费者问题

2016-06-04 00:00 681 查看
摘要: 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一段时间段内共用同一个存储空间。生产者向空间里面存放数据,而消费者去用数据,此过程必须加以协调。

遇到yy的面试机试题目,要求实现读者写着问题,生产者产生随机数,消费者读取随机数。代码比较简单。这是我写的代码的class:

ProducerConsumre.java负责生成临界资源空间Resource.java的实例。负责生成Producer和Consumer的实例,生成生产者和消费者线程。具体代码如下:

ProducerComsumer.java

public class ProducerConsumer {
public static void main(String[] args){
Resource re=new Resource();
Producer p=new Producer(re);
Consumer c=new Consumer(re);
new Thread(p).start();
new Thread(c).start();
}
}

Producer.java

import com.Thread.Resource;
import java.util.Random;
public class Producer implements Runnable {
Resource re= new Resource();
Producer(Resource r){
this.re=r;
}

public void run(){
int i;
i=(int) (Math.random()*100+1);
while(true){
System.out.println("写入"+i);
re.setNumcount(i);
try{
Thread.sleep(500);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}

}

Consumer.java

public class Consumer implements Runnable{

Resource re = new Resource();
Consumer(Resource r){
this.re=r;
}
public void run(){
while(true){
System.out.println("读取"+re.getNumcount());
try{
Thread.sleep(500);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}

Resource.java //定义一个变量,两个线程安全的方法操作变量

public class Resource {
private int num=0;
public synchronized int getNumcount(){
return num;
}
public synchronized void setNumcount(int i){
this.num=i;
}

}

在做面试机试题目的时候有点紧张了,代码写的很乱,也忘了考虑线程安全的问题了

同时在Producer.java中的生成随机数的方法,可以优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java多线程