我正在编写一个程序,旨在让两个不同的矿工收集地图的资源并将其带回他们所属的城市。这是描述其集合的方法:
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和我的图形窗口)...
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问题。有没有办法解决这个问题?