私が作業しているゲームで次のような状況があります。
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 メソッドは、TimerまたはScheduledExecutorServiceを使用して、0.5 秒ごとに実行されるようにスケジュールされています。
問題はupdate
メソッドであり、いつでも別のスレッドによって呼び出されます。だから私は尋ねます:
1 -フィールドsynchronized
を保護するために 使用するとどうなりますか? state
タイマーは待機しますか?「待機期間」はどのように補償されますか?
2 - これを行うより良い方法はありますか? 多分 moves
いくつかのキューに保存しますか?
ありがとう!