Wie verwendet ich SimpleAntaskexecutor richtig, wenn es darauf warten muss, dass alle virtuellen Threads fertiggestellt Java

Java-Forum
Anonymous
 Wie verwendet ich SimpleAntaskexecutor richtig, wenn es darauf warten muss, dass alle virtuellen Threads fertiggestellt

Post by Anonymous »

Wie man SimpleAsynctaskexecutor richtig verwendet, wenn es darauf warten muss, dass alle virtuellen Threads fertiggestellt werden? Diese Concurrenthashmap enthält Daten, die dann zum Senden per E -Mail an Benutzer verwendet werden. Sobald sie alle ihren Job beendet haben, möchte ich die E -Mails nacheinander senden. Hiob. Ich möchte darauf warten, dass alle virtuellen
-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");
}

}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post