Виртуальный поток не останавливается после завершения работы приложения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().

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