Время детерминированного исполнения Runnable

Данный объект 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 ответа

Решение

Вы можете ввести байт-код, чтобы он проверял время ожидания после каждой операции. Это может сделать его в 100 раз медленнее или больше, но это будет детерминированным.

Более прагматичным подходом было бы проверить время ожидания при вводе вашего выбора, добавив код в Runnable.

Вы можете обернуть свои операции в командные объекты следующим образом:

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

Runnable будет содержать список этих объектов и будет вызывать, скажем, первые 100 из них.

Другие вопросы по тегам