java暂停/恢复线程中的任意计算
我正在制作一个编程游戏,玩家可以在其中编程他们盟友的行为。播放器为给定的ally编写decise()函数体,该函数体可以用任何java代码填充,但必须返回操作。我想给每一个盟友一组有限的计算量,所以1)增加更多的实体不会太慢游戏,2)一个实体花在计算上的时间会反映在游戏中,所以如果一个盟友花更多的时间“思考”,它的行动就会更少。我的灵感来自于Battlecode,它给每个单元一个固定数量的字节码,然后暂停计算,让程序员注意到事情发生了变化
我的问题是如何暂停和恢复正在线程中执行决策函数的实体。我知道这样做的“正确”方法是设置一个标志,告诉线程暂停,并让它偶尔检查一下,但由于我无法强制播放器在decise()函数中检查标志,因此我不确定如何暂停线程。实体只查看世界的固定表示形式,只需返回一个枚举值,所以我认为它们不应该对任何东西都有锁,但我希望有比使用不推荐的线程暂停方法更好的方法。我愿意改变玩家编写代码的方式,但我想不出一种方法,在仍然对用户隐藏暂停标志检查的同时,不让编写决策循环变得混乱和繁重。一定有办法做到这一点,因为战地代码做到了,但我在网上搜索如何做到的细节时不知所措
# 1 楼答案
如果要“暂停”当前线程,请使用java。util。同时发生的锁。锁支持可能会帮助你。如果您想暂停其他线程,我认为它不在java设计的范围内,您只能中断另一个线程,或者设置一个标志,而不是暂停
# 2 楼答案
你不能“暂停一个线程”,你也不能期望玩家遵守你的要求“玩得很好”并检查标志等。你可以中断另一个线程,但线程中运行的代码可以很容易地从中恢复。因此,您需要一种方法让控制线程保留控制权
您可以:
大多数这类关注点都是由
java.util.concurrent
库提供的。退房:ExecutorService
实例