本帖最后由 潘才新 于 2013-9-1 11:13 编辑
生产者消费者练习题:
package com.qindazhong1;
import java.util.Random;
import java.util.Vector;
public class SynTest {
public static void main(String[] args){
SynStack stack = new SynStack();
Thread producer1 = new Thread(new Producer(stack));
Thread consummer1 = new Thread(new Consummer(stack));
producer1.start();
consummer1.start();
}
}
class SynStack {
private Vector<Integer> list = new Vector<Integer>();
public synchronized int pop(){
int c ;
while(list.size()==0){
try{
this.wait();
}catch(Exception e){}
}
c = list.remove(list.size()-1); //进行弹栈操作
return c ;
}
public synchronized void push(int c){
this.notify();
try{
Thread.sleep(100);
}catch(Exception e){}
list.addElement(c);
}
}
class Producer implements Runnable{
private SynStack theStack;
public Producer(SynStack s){
this.theStack = s ;
}
public void run(){
int c = (new Random()).nextInt(new Integer(9));
theStack.push(c);
System.out.println("生产者生产了一个数字"+c);
}
}
class Consummer implements Runnable {
private SynStack theStack = new SynStack();
public Consummer(SynStack s){
this.theStack = s ;
}
public void run(){
int i = theStack.pop();
System.out.println("消费者取出了一个数字"+i);
}
}
现在实现了生产一个数字 ,然后打印一个数字,怎么让他一直生产一直打印呢?怎么修改代码,请把你修改代码的地方注释一下便于我理解,谢谢,重新写一个能实现的程序更好。题目是:编写生产者消费者模式的程序。生产者每隔100ms产生一个0~9之间的数字,保存在MyNumber类型的对象中,并显示出来。只要MyNumber类型中存在数据就将其取出并显示。试定义MyNumber类,编写生产者消费者程序,并编写主程序创建一个MyNumber对象,以及一个生产者线程个一个消费者线程并将这两个线程西东并运行。我写程序的和题目有偏离
|