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