1

这是我的主要内容:

public static void main(String[] args){
    java.util.ArrayList data_queue=new java.util.ArrayList();
    Producer p = new Producer(data_queue);
    Consumer c = new Consumer(data_queue);
    p.start();
    c.start();
    System.out.println(“Random Week Day:”);
}

class Producer extends Thread{
    ArrayList data_queue;
    public Producer(ArrayList data_queue){
        this.data_queue=data_queue;
    }
    public void run(){
        //your code; Create random week day, Add
    }
}

class Consumer extends Thread{
    ArrayList data_queue;
    public Consumer(ArrayList data_queue){
        this.data_queue=data_queue;
    }
    public void run(){
        //your code: Remove, display
    }
}

Producer 创建随机工作日并最后添加到 ArrayList -> 并打印 Consumer 获取此 ArrayList 中的第一个元素 -> 删除它 -> 并打印

如果我无法在 MAIN FUNCTION 编辑任何内容,只需在 Producer 和 Consumer 进行更改。如何通过线程访问相同的变量(ArrayList data_queue)以添加和删除

4

2 回答 2

5

我的猜测是您的老师希望您使用data_queue.wait()and data_queue.notifyAll()。消费者应该在队列为空时等待,生产者应该在每次将元素放入队列时通知。

仔细阅读这些方法(在 java.lang.Object 中)的 javadoc,因为它们是难以使用的低级同步机制。Java 教程也是一个很好的参考。

于 2013-07-17T08:21:48.380 回答
0

您已经在访问同一个对象。您只调用了new一次,因此只有一个 ArrayList 已传递给每个人。不要忘记注意线程之间的同步,例如:

List<String> list = Collections.synchronizedList(new ArrayList<String>());
于 2013-07-17T08:22:41.093 回答