так. еще раз. проблема не в том, чтобы экранировать блокирующий вызов, а нооборот, чтобы не выключать программу пока набор этих экранированных вызовов работает
Дожидаться потоков не нужно. Джава устроена так, что если главный тред отработал, то перед тем как выйти, он ждет завершения других тредов. Когда они остановятся, главный тред выйдет
Вроде бы не ждёт JVM завершение тредов, кроме главного. И если главный закончился, а остальные треды не запущены с флагом daemonize, то все они погибнут. Если я ничего не путаю.
When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls the method named main of some designated class). The Java Virtual Machine continues to execute threads until either of the following occurs:
- The exit method of class Runtime has been called and the security manager has permitted the exit operation to take place.
- All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method.
В общем, ждать ничего не нужно. Для примера можно сделать уберджар, который в main запускает вечный тред со слипом. И тогда джарник будет выполняться вечно
У нас проекты устроенты так: в main запускается система и вдобавок вешаются обработчики сигналов. Если пришел sigterm, система выключается и главный тред выходит
Спасибо за советы. А зачем обработчик сигналов переопределить. Вроде по описанию он делает стандартные действия, или вы там ещё культурно закрывает ресурсы?