1

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

4

2 回答 2

2

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

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

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

于 2012-03-30T16:15:50.777 回答
1

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

一个更实用的方法是通过将代码添加到 Runnable 来检查你选择的超时时间。

于 2012-03-30T16:14:07.550 回答