我正在工作的游戏中有以下情况:
class GameLogic implements Runnable
{
State state;
private State changeState()
{
//state changes here (note the `private`)
}
// this ticks at each 0.5 seconds
public void run()
{
//code that changes state
changeState();
}
// this will be called by a external Thread at any moment
public void update(Move move)
{
//code that changes state
applyMove(move);
}
private void applyMove(Move move)
{
//state changes here
//state = ... doesn't matter
}
}
上面的 run 方法被安排为每 0.5 秒执行一次,使用Timer或ScheduledExecutorService。
问题是update
方法,随时会被另一个线程调用。所以我问:
1 - 如果使用synchronized
保护 state
字段会发生什么?计时器会等待吗?它将如何补偿“等待期”?
2 - 有没有更好的方法来做到这一点?也许存储 moves
在某个队列上?
谢谢!