otherThread.join( time )
, кажется, ожидает time
в реальных миллисекундах. Я хочу подождать time
в реальном времени процессора, чтобы я мог получить согласованное поведение в своем приложении.
Я быстро взглянул на ThreadMXBean
, но, похоже, это не совсем то, что я хотел (он сообщает мне фактическое время процессора, но не предлагает удобного способа подождать, пока пройдет некоторое время). Занятый цикл вокруг sleep()
может сработать, но кажется крайне неэффективным.
Я также думал об использовании другого потока и ожидании на Condition
, но я не уверен, как это будет работать. Основной поток будет делать: myCondition.await()
, где другой поток будет переключать myCondition
, когда otherThread
использовал time
фактическое время процессора. Опять же, это кажется сложным и, вероятно, по-прежнему требует, чтобы управляющий поток имел занятый цикл.
Редактировать: Я делаю это для сценария оценки. Это означает, что мне нужен способ тайм-аута, если ученик находится в бесконечном цикле, и это должно быть справедливым. Я использовал JUnit для запуска тестов на учениках, но у него та же проблема с тайм-аутом: если одна и та же (неэффективная) отправка выполняется несколько раз, она может получить разные оценки в зависимости от того, какие другие задания выполняются на машине в то время (реальная проблема для групповой работы).
Но это проблема и с обычным модульным тестированием, тоже - используя тактовое время вместо процессорного времени, JUnit получает противоречивые результаты теста?