Как стать автором
Обновить

Комментарии 10

Полезная статья, спасибо.

Одно замечание по самим тестам. Во многих тестах метод SetUp вызывает StartThread, который уже вызывает executor. А метод TearDown сразу вызывает executor. Как-то некошерно с точки зрения дизайна.

И вам спасибо )

Во многих тестах метод SetUp вызывает StartThread, который уже вызывает executor. А метод TearDown сразу вызывает executor.

Я думал об этом и в конце-концов решил исключительно для краткости не выносить одну строку с executor.shutdown() в отдельный метод.

Скорее переименовать в raiseFlagWithDelay() или что-то в таком духе ибо он кроме запуска потока выполняет взведение флага.

Использовать нечетные задержки и использовать целочисленное деление- ну такое

В данном случае это не столь важно )

для более коротких пауз используйте LockSupport.parkNanos();

На самом деле, зависит от ОС. На Windows всё наоборот: минимальный интервал сна (1мс) достигается именно Thread.sleep, а LockSupport.parkNanos при любом положительном аргументе засыпает минимум на 3.9мс (1/256 секунды). Такая вот особенность реализации.

Что называется "Внезапно!". Спасибо за уточнение!

while(wait) Thread.sleep() лучше вообще не использовать, если ожидание обещает быть хоть сколько нибудь долгим - используйте семафоры, например.

А ожидание события с точностью до микросекунд - обычно занятие ядра, поэтому там этих спинлоков много.

И если поток не отдать, на однопроцессорной системе это внезапно получится бесконечный цикл.

если поток не отдать, на однопроцессорной системе это внезапно получится бесконечный цикл

Планировщик не позволит одному потоку монополизировать весь процессор, ИМХО.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории