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

解决方案 »

  1.   

    lz试试
    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);
    }
    } }}
      

  2.   


    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++;
    }
    }
    }
      

  3.   

    比较一般的代码,求大神指出不足之处:import java.util.LinkedList;
    import java.util.Queue;
    public class TestQueue {
    Queue queue =new LinkedList();
    public TestQueue() {
    Thread t1 = new Thread(new OfferThread());
    Thread t2 = new Thread(new PollThread());
    t1.setName("t1");
    t2.setName("t2");
    t1.start();
    t2.start();
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
    System.out.println("start run....");
    new TestQueue();


    }
    class OfferThread implements Runnable{
    public void run(){
    int i=1000;
    while(i>0){
    int random = (int)(Math.random()*100);
    queue.offer(random);
    System.out.println("t1:");
    System.out.println("add:" + random);
    try {
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    i--;
    }
    }
    }
    class PollThread implements Runnable{
    public void run() {
    int i = 1000;
    while(i>0){
    if(!queue.isEmpty()){
    System.out.println("t2");
    System.out.println("poll:" + queue.poll());
    }else{
    try {
    Thread.sleep(10);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    try {
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }

    }