java - 暂停/恢复线程中的任意计算

标签 java concurrency

我正在制作一款编程游戏,玩家可以在其中对盟友的行为进行编程。玩家为给定的盟友编写decide()函数的主体,可以用任何java代码填写,但必须返回一个 Action 。我想为每个盟友提供一组有限的每个刻度的计算量,因此 1) 添加更多实体不会使游戏速度减慢太多,2) 实体花费计算的时间反射(reflect)在游戏中,所以如果一个盟友花更多时间“思考”,就会减少行动次数。我对其如何工作的灵感是 Battlecode ,它为单位每回合提供一定数量的字节码,然后暂停计算并使程序员在事情发生变化时注意处理。

我的问题是如何暂停和恢复正在线程中执行决策函数的实体。我理解执行此操作的“正确”方法是设置一个标志,告诉线程暂停并偶尔检查一下,但由于我无法强制玩家在decide()函数中检查标志,所以我不知道如何暂停线程。这些实体只查看世界的固定表示,并且只需要返回一个枚举值,所以我认为它们不应该锁定任何东西,但我希望有一种比使用已弃用的更好的方法来做到这一点线程暂停方法。我愿意改变玩家编写代码的方式,但我想不出一种方法来做到这一点,同时仍然向用户隐藏暂停标志检查,而不会使编写决策循环变得困惑和繁重。肯定有某种方法可以做到这一点,因为 Battlecode 就是这样做的,但我在网上搜索有关如何操作的详细信息时不知所措。

最佳答案

如果你想“暂停”当前线程,java.util.concurrent.locks.LockSupport可能会帮助你。如果你想暂停其他线程,我认为这不在java设计的范围之内,你只能中断另一个线程,或者设置一个标志,而不是暂停。

关于java - 暂停/恢复线程中的任意计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12102004/

相关文章:

java - GAE Objectify如何将查询结果用于另一个查询

java - Android 运行时权限不断被拒绝

multithreading - Java线程和内核数

java - TomEE 中的 ManagedScheduledExecutorService

java - 判断ExecutorService的关闭时间

java - com.android.build.api.transform.TransformException 'command ' C :\Program Files\Java\jdk1. 8.0\bin\java.exe'' 完成,退出值非零 3

java - 函数方法

java - JAVA从目录中逐行读取多个文本文件

java - ThreadPoolExecutor的配置

java - 从 Callable 启动和停止 Process Thread