假设我需要在同一个线程中执行N个任务。这些任务有时可能需要来自外部存储的一些值。我事先不知道哪个任务可能需要这样的值以及何时。一次获取M个值比向外部存储的M个查询中获取相同的M个值要快得多。
请注意,我不能指望任务本身的合作,它们只能被视为 java.lang.Runnable 对象。
现在,在我看来,理想的程序看起来像
- 循环执行所有任务。如果一个任务请求一个外部值,记住这一点,暂停 任务并切换到下一个。
- 一次获取上一步请求的值。
- 删除所有已完成的任务(暂停的不计为已完成)。
- 如果还有任务,则转到步骤 1,但不是执行任务,而是从挂起状态继续执行。
据我所知,“暂停”和“恢复”某事的唯一方法是从 JVM 堆栈中删除其相关帧,将它们存储在某个地方,然后将它们推回堆栈并让 JVM 继续。
是否有任何标准(不涉及比 JVM 字节码更低级别的黑客攻击)方法来做到这一点?
或者您能否提出另一种可能的方法来实现这一点(除了启动N个线程或使任务以某种方式合作)?