[英]How to call the same method for two different objects in Java
我正在編寫一個程序,旨在讓兩個不同的礦工收集地圖資源並將其帶回他們所屬的城市。 這是描述其集合的方法:
public void harvest(ArrayList<Resource> rez, SimpleWindow w) {
double min = Integer.MAX_VALUE;
int tracker = 0;
for (int i = 0; i < rez.size(); i++) {
if (Math.hypot(rez.get(i).getX() - this.x, rez.get(i).getY() - this.y) < min) {
min = Math.hypot(rez.get(i).getX() - this.x, rez.get(i).getY() - this.y);
tracker = i;
}
}
moveTo(rez.get(tracker).getX(), rez.get(tracker).getY(), w, rez);
this.value = this.value + rez.get(tracker).getValue();
SimpleWindow.delay(200);
rez.get(tracker).undraw(w);
rez.remove(tracker);
moveTo(city.getX(), city.getY(), w, rez);
city.addResource(this.value);
SimpleWindow.delay(200);
}
當我在像這樣的無限while循環中為兩個不同的礦工調用此方法時(其中r是資源對象的ArrayList,而w是我的圖形窗口)...
Miner robot = new Miner(500, 235, city1);
Miner robot1 = new Miner(850, 430, city2);
while (true){
robot.harvest(r, w);
robot1.harvest(r, w);
city1.draw(w);
}
...他們只是輪流收集資源,而不是同時進行。 我了解原因,但無法解決問題。
我嘗試使用像這樣的單獨線程...
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
while (true){
robot.harvest(r, w);
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
while (true){
robot1.harvest(r, w);
}
}
});
這在礦工同時進行開采的過程中起到了一定作用,但同時也產生了一系列圖形故障和資源對象的ArrayList問題。 有辦法解決這個問題嗎?
您應該在ArrayList中使用Collections.synchronizedList()
。
至於圖形故障,不是很確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.