@reus

Что делать процессами которые остались от тредов Java?

В общем у меня возникла проблема. Так сложилось что приложение должно запускаться каждую минуту и жить около 40 сек. Судя по логам (логи поступают из stdout в файл) приложение завершает работу нормально и без ошибок, НО! htop показывает множество процессов этого приложения. Как я понимаю это процессы тредов.
Причем заметил особенность, если я запускаю приложение просто:
java -jar /path/app.jar
то все нормально. Но если я добавляю задачу в крон:
* * * * * java -jar /path/app.jar
То возникает такая беда с потоками.

Код работает приблизительно следующим обазом:
1. main создает экземпляр класса ThreadList и запускает метод .start()
2. TreadList получает экземпляры классов и вызывает
for (Advert adv : getAdverts()) {
			adv.start();
		}
		for (Advert adv : getAdverts()) {
			try {
				adv.join();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

3. Класс Advert расширяет Thread и выполняет основную логику. Если он выполняется слишком долго вызывается исключение и вызывает метод interrupt()

Подскажите из-за чего могут не завершаться процессы потоков?
  • Вопрос задан
  • 230 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ruslanys
А почему бы Вам не сделать запуск тредов внутри приложения? Важно понимать разницу между процессом и потоком:

В реальной жизни самое главное отличие между ними с точки зрения производительности заключается в том, что поток выполнения использует одну и ту же область памяти, а процессы получают собственные области. Поэтому отдельные процессы требуют гораздо больше памяти.


Мало того, запуск JVM каждые 40 секунд также имеет свои издержки.
Правильно было бы запускать приложение 1 раз, а уж оно каждые 40 секунд запускает ваши `Advert` потоки.

ИМХО
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы