首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个关于队列和线程的编程题,该怎么处理

2012-04-17 
一个关于队列和线程的编程题生成一些随机数,一个线程负责将随机数压到队列里,另外一个线程负责从队列取数

一个关于队列和线程的编程题
生成一些随机数,一个线程负责将随机数压到队列里,另外一个线程负责从队列取数据。请大侠编程指点

[解决办法]
lz试试。。。

Java code
package testio;import java.util.LinkedList;import java.util.Queue;import java.util.Random;public class TestList {    private Queue<Integer> queue = new LinkedList<Integer>();    public synchronized boolean offer(Integer i) {        return queue.offer(i);    }    public synchronized Integer poll() {        return queue.poll();    }    /**     * @param args     */    public static void main(String[] args) {        TestList tl = new TestList();        new Thread(tl.new O()).start();        Thread t = new Thread(tl.new P());        t.setDaemon(true);        t.start();    }    class O implements Runnable {        @Override        public void run() {            Random rand = new Random();            for (int i = 0; i <= 9; i++) {                Integer interger = rand.nextInt();                System.out.println("offer " + interger);                offer(interger);            }        }    }    class P implements Runnable {        @Override        public void run() {            while (true) {                Integer i;                if ((i = poll()) != null)                    System.out.println("poll " + i);            }        }    }}
[解决办法]
Java code
import java.util.ArrayList;import java.util.List;import java.util.Random;public class Queue{    List<Integer> Integers = new ArrayList<Integer>();    int maxSize = 4;    int count = 0;    public Queue(){    }    public synchronized void add(Integer e){                if(Integers.size()==maxSize){            try {                                this.wait();            } catch (InterruptedException e1) {                e1.printStackTrace();            }        }        this.notifyAll();        if(Integers.size()<maxSize){            System.out.println(Thread.currentThread().getName()+ " " + e);            Integers.add(e);            count++;        }    }    public synchronized void remove(){        if(Integers.size()==0){            try {                                this.wait();            } catch (InterruptedException e1) {                e1.printStackTrace();            }        }        this.notifyAll();        if(Integers.size()>0){            System.out.println(Thread.currentThread().getName()+" "+this.Integers.get(0));            Integers.remove(0);        }            }    public static void main(String args[]){        Queue q = new Queue();        Create c= new Create(q);        PullOut po = new PullOut(q);        new Thread(c).start();        new Thread(po).start();    }}class Create implements Runnable{    String name = "生产者";    private Queue q;    public Create(Queue q){        this.q = q;    }    @Override    public void run(){        int count=0;        Random r =new Random();        while(count<10){            int number = r.nextInt()%20;            q.add(number);                try {                    Thread.sleep(300);                } catch (InterruptedException e) {                    e.printStackTrace();                }            count++;        }    }}class PullOut implements Runnable{    String name = "消费者";    private Queue q;    public PullOut(Queue q){        this.q = q;    }    @Override    public void run(){        int count=0;        while(count<10){            q.remove();                try {                    Thread.sleep(800);                } catch (InterruptedException e) {                    e.printStackTrace();                }            count++;        }    }} 

热点排行