当前位置: 代码迷 >> J2SE >> 一道面试题,小弟我不会。各位帮忙看下
  详细解决方案

一道面试题,小弟我不会。各位帮忙看下

热度:65   发布时间:2016-04-24 01:13:56.0
一道面试题,我不会呵呵。各位帮忙看下
请用Java语言实现一个队列,该队列可在多线程环境下使用,多个线程可并发向队列插入数据或读取数据。
另外再给出访问这个队列的多线程实现类。

------解决方案--------------------
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++;        }    }}
  相关解决方案