Время детерминированного исполнения Runnable - PullRequest
1 голос
/ 30 марта 2012

Учитывая объект 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 ]

2 голосов
/ 30 марта 2012

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

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

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

1 голос
/ 30 марта 2012

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

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

...