Java 从2个或更多类访问同一变量
以下是我的主要观点:Java 从2个或更多类访问同一变量,java,Java,以下是我的主要观点: 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.printl
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
}
}
制作人创建随机工作日,最后添加到ArrayList->并打印
消费者获取此ArrayList中的第一个元素->删除它->并打印
若我不能在主功能中编辑任何内容,只需在生产者和消费者中进行更改。我如何访问同一个变量(ArrayList data\u queue)以通过线程添加和删除我猜您的老师希望您使用
data\u queue.wait()
和data\u queue.notifyAll()
。消费者应在队列为空时等待,生产者应在每次将元素放入队列时通知消费者
仔细阅读这些方法的javadoc(在java.lang.Object中),因为它们很难使用低级同步机制。这也是一个很好的参考。我猜你的老师希望你使用
数据队列。wait()
和数据队列。notifyAll()
。消费者应在队列为空时等待,生产者应在每次将元素放入队列时通知消费者
仔细阅读这些方法的javadoc(在java.lang.Object中),因为它们很难使用低级同步机制。这也是一个很好的参考。您已经在访问同一个对象。您只调用了一次
new
,因此只有一个ArrayList已传递给所有人。不要忘记注意线程之间的同步,如:
List<String> list = Collections.synchronizedList(new ArrayList<String>());
List List=Collections.synchronizedList(新的ArrayList());
您已经在访问同一个对象。您只调用了一次new
,因此只有一个ArrayList已传递给所有人。不要忘记注意线程之间的同步,如:
List<String> list = Collections.synchronizedList(new ArrayList<String>());
List List=Collections.synchronizedList(新的ArrayList());
为什么不使用同步方法?为什么访问数组列表会有问题?在主方法中实例化的ARRAYLIST被传递给消费类和生产者类的构造函数,并且可以作为这些类中的实例变量可用……对于实际的生产代码,考虑使用Addio.@ JTrackCK,事实上,仅仅在DATAAQueLead上进行同步可能是不够的。如果这样做,就不能保证使用者线程不会在生产者线程之前获得锁。@Alderath,我知道。这只是一个初步建议。:)为什么不使用同步方法?为什么访问数组列表会有问题?在主方法中实例化的ARRAYLIST被传递给消费类和生产者类的构造函数,并且可以作为这些类中的实例变量可用……对于实际的生产代码,考虑使用Addio.@ JTrackCK,事实上,仅仅在DATAAQueLead上进行同步可能是不够的。如果这样做,就不能保证使用者线程不会在生产者线程之前获得锁。@Alderath,我知道。这只是一个初步建议。:)我哥哥有一个练习,他的老师想用这个主要功能,不要改变这个。我只是在生产者和消费者处更改代码,但若不更改main func,则无法同步ArrayList的值。结果总是:添加:星期五随机工作日:删除:星期五添加:星期三添加:星期六添加:星期四添加:星期一首先,我不是你的兄弟。第二,没有必要大喊大叫。第三,我在哪里告诉过您修改main方法中的任何内容?为什么不能从使用者的运行方法和生产者的运行方法同步列表?你试过什么吗?我哥哥有一个练习,他的老师想用这个主要功能,不要改变这个。我只是在生产者和消费者处更改代码,但若不更改main func,则无法同步ArrayList的值。结果总是:添加:星期五随机工作日:删除:星期五添加:星期三添加:星期六添加:星期四添加:星期一首先,我不是你的兄弟。第二,没有必要大喊大叫。第三,我在哪里告诉过您修改main方法中的任何内容?为什么不能从使用者的运行方法和生产者的运行方法同步列表?你试过什么吗?