Код: Выделить всё
@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();
}
Мобильная версия