Runnable的时间确定性执行

时间:2012-03-30 16:03:52

标签: java bytecode execution-time deterministic

给定一个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也可能在这里引起问题。

2 个答案:

答案 0 :(得分:2)

您可以将操作包装在命令对象中,如下所示:

public interface Operation {       
   int executeOp(int prevResult);
}

runnable将保存这些对象的列表,并且只调用前100个对象。

答案 1 :(得分:1)

您可以注入字节代码,以便在每次操作后检查超时。这可能会使它慢100倍或更多,但这将是确定性的。

一个更实用的应用程序是通过向Runnable添加代码来检查你的选择中的超时。