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中的生成随机数的方法,可以优化。
遇到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多线程实现同时输出
- java多线程编程制作电子时钟
- java多线程入门知识及示例程序
- 使用java实现http多线程断点下载文件(一)
- 使用java实现http多线程断点下载文件(二)
- java多线程Future和Callable类示例分享
- java多线程核心概念
- Java线程:大总结
- Java多线程初学者指南(1):线程简介
- Java.多线程(学习笔记)
- java 中两种多线程的区别,start方法和run方法的启动区别
- Java程序员面试中的多线程问题
- 【转载】GangWang-java synchronized详解
- Java多线程1——概述
- Java多线程2——synchronized和Lock
- Java多线程3——如何停止线程
- 线程池&任务
- java并发机制底层原理
- 线程通信
- java线程概述