请用Java语言实现一个队列,该队列可在多线程环境下使用,多个线程可并发向队列插入数据或读取数据。
另外再给出访问这个队列的多线程实现类。

解决方案 »

  1.   

    用ConcurrentLinkedQueue不就完了么,难道让自己实现?
      

  2.   

    题目都没看明白,我承认我弱爆了.....
    java仍未成功,吾要更加努力!
      

  3.   


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