给定一个Runnable对象,例如
public class Test implements Runnable {
@Override
public void run() {
int x = 2;
int y = 6;
// Snip more code
int w = x - 1;
int z = x * y;
}
}
我希望能够执行一定数量的操作,例如
Test t = new Test();
Executor.execute(t, 100); // Arbitrary unit of operations
这样,如果我第一次执行此操作,则执行:
int w = x - 1;
我用相同参数调用方法的任何其他时间都会导致执行到同一点。
我已经环顾四周,看不到任何合适的东西(例如,ScheduledThreadPoolExecutor将无法正常工作)。
我是否必须转移到字节码级别来制作这个问题?从我所看到的,JIT也可能在这里引起问题。
答案 0 :(得分:2)
您可以将操作包装在命令对象中,如下所示:
public interface Operation {
int executeOp(int prevResult);
}
runnable将保存这些对象的列表,并且只调用前100个对象。
答案 1 :(得分:1)
您可以注入字节代码,以便在每次操作后检查超时。这可能会使它慢100倍或更多,但这将是确定性的。
一个更实用的应用程序是通过向Runnable添加代码来检查你的选择中的超时。