![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
gpepsi |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
У меня есть поток, который должен работать как таймер.
Он должен спать и просыпаться через определенное время. Не использовал таймер, т.к. операции потока могут быть очень длительными. Так вот если поток ждет своего времени слишком долго, то его тогда сложно будет остановить (долго ждать). Появилась идея, что поток должен ждать на неком объекте синхронизации.
Тогда поток ждет 10 минут. Если не дождался завершения, то выполняет работу. А если дождался, то поток завершается. Но метод Thread.stop объявлен как final и не является абстрактным, для того, чтобы его можно было перегрузить. Правильно ли я мыслю, или можно сделать как по-другому с перегрузкой абстрактных методов ? Это сообщение отредактировал(а) gpepsi - 14.8.2012, 11:13 |
|||
|
||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
Есть такая штука - http://docs.oracle.com/javase/7/docs/api/j...torService.html
Он создается так - http://docs.oracle.com/javase/7/docs/api/j...ThreadPool(int) В ScheduledExecutorService можно задать с какой задержкой или с каким периодом будет запускаться поток. Или это не то? |
|||
|
||||
jk1 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
А зря, можно очень просто адаптировать таймер к операциям любой длительности:
код конечно надо причесать, но общая идея должна быть ясна Добавлено через 3 минуты и 39 секунд
Зависит от требований. Если нужно, чтобы между концом предыдущего выполнения и началом следующего был фиксированный интервал времени, то да, ScheduledExecutorService#scheduleWithFixedDelay подходит. Если нужно, допустим, каждую минуту запускать задачу заново вне зависимости от того, завершилась прошлая или нет, то ScheduledExecutorService этого не умеет. -------------------- Opinions are like assholes — everybody has one |
||||||
|
|||||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
jk1, не так.
scheduleAtFixedRate() - запускает потоки с разницей между запусками, равной period. scheduleWithFixedDelay() - запускает потоки с разницей между запуском одной и началом другой, равной delay. Соответственно, для первого случая нужно, чтобы были свободные потоки в пуле, если время выполнения задачи превышает period. |
|||
|
||||
gpepsi |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
а как завершить выполнения потока ?
|
|||
|
||||
jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Правда?
Как видно из доков оно будет тормозить последующие вызовы при затягивании предыдущих, а не запускать их в параллель. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
jk1, да, все так. Прошу прощения за дезинформацию.
Для остановки можно получить ScheduledFuture у scheduleAtFixedRate() и вызвать cancel(). |
|||
|
||||
gpepsi |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
понятно - спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |