2009-10-22 3 views
0

У меня есть приложение, которое создает рабочие потоки и обрабатывает файлы в рабочих потоках. При запросе завершения работы приложения я хочу, чтобы приложение завершалось только тогда, когда рабочий поток завершил обработку текущего файла (если он обрабатывает файл). Я использую JavaServiceWarapper для управления своим приложением.JavaServiceWrapper: приложение не ждет завершения работы

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

Обработка файла не требуется более 30 секунд, и я установил тайм-ауты на 60 секунд, чтобы быть только одной безопасной стороной.

По какой-то причине, когда я запускаю остановку, мое приложение немедленно отключается и не ждет завершения рабочих потоков. Рабочие потоки получают запрос на завершение работы, но приложение немедленно выходит (и не ждет 60 секунд)

Некоторые важные настройки У меня есть wrapper.java.mainclass = org.tanukisoftware.wrapper.WrapperSimpleApp wrapper.adviser = FALSE wrapper .debug = FALSE wrapper.disablerestarts = FALSE wrapper.jvmexit.timeout = 60 wrapper.requestthreaddumponfailedjvmexit = TRUE wrapper.shutdown.timeout = 60 wrapper.signal.mode.hup = FORWARD wrapper.startup.timeout = 300 wrapper.usesystemtime = FALSE wrapper .ping.timeout = 120

Может ли кто-нибудь помочь мне с ошибкой, которую я делаю.

ответ

0

Вам не удалось запустить все ваши рабочие потоки в качестве демонов, не так ли? если это так, VM рассмотрит работу, которую они делают несущественной, и умрет, несмотря на то, что они все еще работают.

из JavaDocs of Thread.setDaemon(): «Виртуальная машина Java выходит, когда единственная потоки - это все потоки демона ».

попробуйте установитьDaemon (false) перед тем, как начать Thread и посмотреть, поможет ли это.

+0

Hi Saleem, У меня есть все рабочие потоки как не-демон. Это не помогло :( – 2009-10-23 14:42:51

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