我正在尝试使我的角色人物使用线程在2D网格上运行。我将位置(人在网格上的位置)更改为atomicReference,并将其getter和setter更改为atomic方法。但是,在执行程序时,我的角色向错误的方向移动(向前移动几步,向后移动几步)。我不知道出了什么问题,假设可以使用寻路功能?
是因为打印方法不是原子的吗?我应该如何将方法更改为原子方法?还是有解决种族状况错误的另一种方法?
public abstract class Person {
Optional<Color> skinColor;
AtomicReference<Cell> location;
Move move;
public Person(Cell location, Move move){
this.location = new AtomicReference<>(location);
this.skinColor = Optional.empty();
this.move = move;
}
public void paint(Graphics g){
Cell temp=location.get();
if (skinColor.isPresent()) {
g.setColor(skinColor.get());
g.fillOval(temp.x + temp.width / 4, temp.y + temp.height / 4, temp.width / 2, temp.height / 2);
g.drawOval(temp.x + temp.width / 4, temp.y + temp.height / 4, temp.width / 2, temp.height / 2);
g.setColor(Color.BLACK);
}
}
public void setLocationOf(Cell loc){
location.set(loc);
}
public Cell getLocationOf(){
return location.get();
}
public void setMove(Move move){
this.move = move;
}
public List<Step> autoMoves() {
return move.pathPathing(this);
}
}