Виртуальный поток не останавливается после завершения работы приложенияJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Виртуальный поток не останавливается после завершения работы приложения

Сообщение Anonymous »

Я использую:

Код: Выделить всё

@Configuration
public class AsyncConfig {

@Bean(name = "virtualExecutor")
public ExecutorService newExecutor() {
return Executors.newThreadPerTaskExecutor(
Thread.ofVirtual()
.name("virtual-", 0)
.factory()
);
}
}
Чтобы создать виртуальные потоки и запустить:

Код: Выделить всё

@Autowired
@Qualifier("virtualExecutor")
private ExecutorService virtualExecutor;

public void myFunc(){
virtualExecutor.execute(() -> {
try {
f1();
} catch (Exception e) {
log.error("Failed", e);
}
});
}
И:

Код: Выделить всё

private f1(){
for(...){
if (Thread.currentThread().isInterrupted()) {
return false;
}

// my code
}
}
Потоки продолжают работать после завершения работы приложения.
Для обработки завершения я использую следующий код:

Код: Выделить всё

@Component
public class ExecutorShutdownHandler {

private final ExecutorService executor;

public ExecutorShutdownHandler(@Qualifier("virtualExecutor") ExecutorService executor) {
this.executor = executor;
}

@PreDestroy
public void shutdown() {
executor.shutdownNow();
}
Есть ли решение этой проблемы? Мой код выполняет вызовы API с использованием сценариев Python через новый ProcessBuilder().
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»