Threadpooltaskexecutor mit kleiner Warteschlangenkapazität blockieren Anrufe?Java

Java-Forum
Anonymous
 Threadpooltaskexecutor mit kleiner Warteschlangenkapazität blockieren Anrufe?

Post by Anonymous »

Entschuldigung für die Formatierung von Problemen ... < /p>
Ich habe jetzt seit ungefähr 4 Stunden versucht, dies zu verstehen. Grundsätzlich habe ich eine Methode, bei der eine private Methode aufgerufen wird, die Threadpooltaskexecutor verwendet. < /P>

Code: Select all

 public ThreadPoolTaskExecutor someTaskExecutor() {
final ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(0);
taskExecutor.setMaxPoolSize(3);
taskExecutor.setKeepAliveSeconds(60);
taskExecutor.setQueueCapacity(3);
taskExecutor.afterPropertiesSet();
return taskExecutor;}
< /code>
So verwende ich es. Machen Sie nichts aus dem "dto" und "obj", einfach zu einem Platzhalter < /p>
   @Override
public void processMessage(final DTO dto) throws Exception {
log.info("MainThread BEFORE [{}] : [{}] - [{}]", dto.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());
final Object obj = save(dto);
log.info("MainThread SAVED [{}] :  [{}] - [{}]", dto.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());
generateSomething(obj);
log.info("MainThread AFTER [{}] :  [{}] - [{}]", dto.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());
}

private void generateSomething(final Object obj) {
someTaskExecutor.execute(() -> {
log.info("thread START [{}] : [{}] - [{}]", obj.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());
//SOME API CALL THAT TAKES 3 second
log.info("thread DONE  [{}] : [{}] - [{}]", obj.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());

});
Mit der aktuellen Einstellung meines Threadpooltaskexecutors, wenn ich 10 gleichzeitige Aufrufe der Hauptmethode habe (die 10 Haupt -Thread erzeugt), gingen nur 6 Thread erfolgreich durch das "Mainthead", das nach dem Aufrufen der privaten Methode, die die private Methode bezeichnet hat, mit Threadpooltaskexecutor -Execut aufgerufen wird. Neue Threads, die vom ThreadPooltaskexecutor hervorgebracht wurden, und warum wird es direkt von der Warteschlangenkapazität beeinflusst. Wenn ich die Warteschlangenkapazität bei 5 anstelle von 3 erstelle, werden 8 Hauptfäden ordnungsgemäß durchgeführt. Wenn ich es nicht festgelassen habe, wird der gesamte Hauptfaden richtig durchgeführt.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post