2013-03-13 2 views
0

скажем, у меня есть поток, и внутри есть timer.schedule (task, 5000). давайте теперь предположим, что таймер запущен, а где-то в потоке есть thread.sleep(). Пока нить все еще спит, 5000 миллисекунд проходит. Остается ли задача таймера работать во время спящего потока?java timer и thread.sleep

Благодаря

+3

Самый простой и интересный способ решить это - проверить его самостоятельно с помощью кода, который вы создали. Что происходит, когда вы это делаете? –

+1

Другим способом является просмотр файлов исходного кода Java API, которые поставляются с JDK, в файле 'src.zip'. – gparyani

ответ

4

Thread.sleep() не может быть где-то в потоке, он может быть в коде задачи, поэтому выполнение задачи будет блокировать на 5000 мс, а затем запустить до завершения.

Обратите внимание, что java.util.Timer является однопоточным планировщиком, и если выполнение задачи заблокировано, таймер не сможет выполнять другие запланированные задачи. См. API

Соответствие каждому объекту Timer представляет собой один фоновый поток, который используется для выполнения всех задач таймера последовательно. Задачи таймера должны быстро завершаться. Если задача таймера занимает слишком много времени для завершения, она «запускает» поток выполнения задачи таймера. Это может, в свою очередь, задерживать выполнение последующих задач, которые могут «сгруппироваться» и выполняться быстро, когда (и если) завершающая задача окончательно завершается.

Смежные вопросы