Время детерминированного исполнения 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 из них.