Планирование нескольких задач в одном потоке - PullRequest
3 голосов
/ 06 июня 2011

Я хочу, чтобы один поток отвечал за несколько задач, запланированных через разные промежутки времени. Я хочу добавлять и удалять задачи из планировщика. Есть ли библиотеки, которые могут мне помочь с этим. Если нет, я буду писать свой собственный код, просто не хочу изобретать велосипед.

В качестве фона я хочу добавить оповещения в свое приложение, управляемое из одного потока, где остальная часть приложения может добавлять / удалять запланированные задачи. Я могу использовать несколько TimerTask или написать свой собственный однопоточный планировщик, но если есть лучший вариант, я не хочу его игнорировать.

Джеймс

Ответы [ 3 ]

4 голосов
/ 06 июня 2011

Если вам нужно что-то, что доступно прямо из коробки в JDK 1.5 или более поздней версии, рассматривали ли вы ScheduledExecutorService?

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html

Вы можете создать одно из них, опираясь наодин поток, использующий этот фабричный метод:

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor()

Существует также альтернативный фабричный метод, который принимает ThreadFactory в качестве аргумента.Это дает вам возможность настроить поток, который будет работать внутри ScheduledExecutorService.Например, вы можете вызвать Thread.setName, чтобы дать потоку более значимое имя.Это очень полезно для отладки приложения.Когда вы генерируете полный дамп потока, вы увидите свое собственное имя, прикрепленное к потоку, а не общее имя, автоматически присоединенное JVM.

В зависимости от необходимости, может быть также целесообразно вызвать Thread.setDaemon (true), чтобы этот поток не блокировал отключение JVM.

Кроме того, рекомендуется выполнить очистку любого ExecutorService после того, как вы покончили с ним, вызвав ExecutorService.shutdown или ExecutorService.shutdownNow.Без гарантированного вызова завершения работы (например, в блоке finally) в вашем приложении может появиться ошибка утечки потока.Из-за использования, которое вы описываете, маловероятно, что это вас укусит, но я всегда хотел бы подчеркнуть это, когда даю кому-то рекомендацию использовать ExecutorService.Это легко упустить из JavaDocs.

1 голос
/ 06 июня 2011

Если вам нужна базовая библиотека, вы можете использовать встроенную ScheduledExecutorService . Это позволяет добавлять повторяющиеся задачи и отменять их. Вы можете установить его однопоточным.

0 голосов
/ 06 июня 2011

Выезд Кварц . Это в значительной степени подходит для планирования задач в Java. Вы можете настроить его как однопоточный, если вы просматриваете документы.

...