多线程错误竞争条件问题

时间:2018-11-07 10:36:52

标签: java multithreading concurrency race-condition

我正在尝试使我的角色人物使用线程在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);

}

}

0 个答案:

没有答案