所以我一直在尝试编写一个涉及线程的java程序。这基本上是一个线程向共享内存资源(下面代码中的单元类)请求移动权限的问题。我将向您展示线程中的代码示例。单元类中提到的三个方法是同步方法,但是它们不实现等待或通知。
public void run() {
try{
while(true){
Random r = new Random();
Thread.sleep(r.nextInt(1000));
//asks the class cell permission to move if the cell is free.
if(cell.asksAccess(xi, yi, xf, yf)){
cell.releaseCell(xi, yi); //release the previous cell
move(); // move the object
cell.blockCell(xi, yi); // blocks the cell where the object is now staying.
setChanged();
notifyObservers();
}
}
} catch (InterruptedException e) {
}
}
private void move() {
int dx = xf - xi;
int dy = yf - yi;
xi += (int) Math.signum(dx);
yi += (int) Math.signum(dy);
}
就像我之前说的,所有调用的单元类方法都是同步的。我的问题是这没有按我的预期工作,当我进行 sysout 调试时,它表明线程并不总是向前移动,有时它们甚至会回到最初的位置,我不明白为什么因为 move 方法总是告诉他们前进,永远不要后退。这是单元类的同步问题吗?或者它是移动方法?任何帮助将不胜感激。