gpt4 book ai didi

java - 将周期性任务与另一个线程同步

转载 作者:行者123 更新时间:2023-12-01 14:11:06 27 4
gpt4 key购买 nike

我正在开发的游戏中遇到以下情况:

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 方法计划使用 TimerScheduledExecutorService 每 0.5 秒执行一次。

问题是 update 方法,随时都会被另一个线程调用。所以我问:

1 - 如果使用synchronized 来保护state 字段,会发生什么情况?计时器会等待吗?它将如何弥补“等待期”?

2 - 有更好的方法吗?也许将移动存储在某个队列上?

谢谢!

最佳答案

  1. TimerScheduledExecutorService 都可以按固定速率或在执行之间固定延迟执行任务。这意味着,具有固定速率的计划任务将补偿执行的运行时间(包括阻塞时间)。具有固定延迟的计划任务则不会。有关详细信息,请参阅以下方法的文档:
  2. 总有更好的方法。不过,解决方案看起来不错。只要它对你有用,就坚持下去。

关于java - 将周期性任务与另一个线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18515729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com