-Threads (VT) fertiggestellt werden, bevor die E -Mails mit den Daten gesendet werden. Probleme verursachen? Ich möchte, dass nur 4 Threads gleichzeitig laufen, während andere darauf warten, dass „freie Slots“ ausgeführt werden. Kann ich mehr als 4 Anrufläte hinzufügen oder muss sie hinzufügen, wie andere virtuelle Threads abgeschlossen sind?
Code: Select all
@Component
@Configuration
public class NotificacoesListener {
...
private ExecutorCompletionService getTaskExecutor() {
SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.setVirtualThreads(true);
taskExecutor.setConcurrencyLimit(4);
ExecutorCompletionService executorCompletionService = new ExecutorCompletionService(taskExecutor);
return executorCompletionService;
}
...
@Scheduled(cron = MySettings.NOTIFICATION_SUB_SYSTEM_EVERY_NIGHT, zone = "GMT-3:00")
@Transactional
public void start() {
System.out.println("Starting at " + Utils.formatDate(LocalDate.now()) + " ...");
...
ConcurrentHashMap map = new ConcurrentHashMap();
ExecutorCompletionService executorCompletionService = getTaskExecutor();
int virtualThreadsRunning = 0;
//
for (Verifica instancia : instancias) {
virtualThreadsRunning++;
executorCompletionService.submit(new Callable() {
@Override
public Object call() throws Exception {
instancia.verifica(tenants, map);
return true;
}
});
}
while (virtualThreadsRunning > 0) {
try {
executorCompletionService.take();
} catch (InterruptedException ex) {
ex.printStackTrace();
} finally {
virtualThreadsRunning--;
}
}
sendEmails(map);
System.out.println("END");
}
}