Heim >Java >javaLernprogramm >So implementieren Sie den eigenen Thread-Pool von Springboot
1 ThreadPoolTaskExecutor Thread-Pool:
ThreadPoolTaskExecutor ist die sekundäre Kapselung, die auf Javas eigenem Thread-Pool ThreadPoolExecutor basiert. Der Hauptzweck besteht darin, die Verwendung von Thread-Pools im Spring-Framework-System komfortabler zu gestalten Spring Thread-Pool
2 Verwenden Sie ThreadPoolTaskExecutor, um Beans in ioc einzufügen
Konfigurationsdateiformular, Spring konfiguriert automatisch
## 默认线程池配置,ThreadPoolTaskExecutor # 核心线程数 spring.task.execution.pool.core-size=8 # 最大线程数 spring.task.execution.pool.max-size=16 # 空闲线程存活时间 spring.task.execution.pool.keep-alive=60s # 是否允许核心线程超时 spring.task.execution.pool.allow-core-thread-timeout=true # 线程队列数量 spring.task.execution.pool.queue-capacity=100 # 线程关闭等待 spring.task.execution.shutdown.await-termination=false spring.task.execution.shutdown.await-termination-period= # 线程名称前缀 spring.task.execution.thread-name-prefix=demo_Thread
Konfigurationsformular:
import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledFuture; //@Configuration public class ThreadConfig { @Value("${task.maxPoolSize}") private int maxPoolSize; //todo 其他的相关配置都可以通过配置文件中注入 @Bean("ThreadPoolTaskExecutor") public Executor myAsync() { final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setMaxPoolSize(maxPoolSize); //todo 其他参数设置 //初始化 executor.initialize(); return executor; } }
3 Nach dem Erstellen von Threads werden alle Thread-Pools von ioc abgerufen
4 Thread-Pool-Verarbeitungsprozess :
(1) Überprüfen Sie, ob der Kern-Thread-Pool voll ist. Wenn die Anzahl der Kern-Threads voll ist, prüfen Sie, ob die Aufgabenwarteschlange voll ist Wenn die Aufgabenwarteschlange voll ist, überprüfen Sie die maximale Anzahl an Threads, um die Aufgabe auszuführen. Wenn sie voll ist, führen Sie sie gemäß der Ablehnungsrichtlinie aus.
, um die normale Thread-Pool-Nutzung durchzuführen:
Senden (aufrufbar), das Ergebnis muss ausgeführt werden.
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ScheduledFuture; @Configuration public class ThreadPoolTaskSchedulerConfig { @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler() { final ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); //设置等待任务在关机时l候完成 threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true); //设置等待时间为60s threadPoolTaskScheduler.setAwaitTerminationSeconds(60); return threadPoolTaskScheduler; } }
schedule(Runnable task,Trigger) schedule(Runnable task,Date)
(4) Abbruch geplanter Aufgaben:
scheduleWithFixedDelay(Runnable task,long delay)
Three @Scheduled implementiert die geplante Aufgabe und kommentiert die geplante Aufgabe
1 Verwenden Sie @EnableScheduled, um die Unterstützung zu aktivieren
2 @Scheduled-Anmerkungsmethode
(1) @Scheduled (fixedDelay=5000) verzögerte Ausführung, nach 5 Sekunden ausgeführt
(2) @Scheduled(fixedRate=5000) geplante Ausführung, alle fünf Sekunden ausgeführt(3) @Scheduled(corn="002* *?") Benutzerdefinierte Ausführung, Maisausdruck Baidu, diese Ausführungsmethode wird häufig verwendet, corn="002**?"Beginnen Sie jeden Tag um zwei Uhr morgens mit der Ausführung geplanter Aufgaben
3 Beachten Sie, dass es sich bei den von @Scheduled gestarteten Aufgaben um Single-Threaded-Aufgaben handelt, die leicht zu blockieren sind
2 @Async ermöglicht asynchrone Aufgaben und gibt den Thread-Pool an
Hinweis: @Scheduled- und @Async-Annotationen ermöglichen geplante Aufgaben und geben den Thread-Pool in @Async("pool") an. Wenn der Thread-Pool nicht angegeben ist, wird Spring's verwendet Der Thread-Pool SimpleAsyncTaskExecutor fügt jedes Mal einen Thread hinzu, um die Aufgabe auszuführen. Wenn @Async die asynchrone Aufgabe jedoch separat aktiviert, wird empfohlen Passen Sie den Thread-Pool entsprechend den Anforderungen an. Hinweis: Der Rückgabewert von @Async kann nur void oder Future sein, der Aufrufer und @Async dürfen nicht in derselben Klasse sein, andernfalls wird aop nicht verwendet Benutzerdefinierter Java-Thread-Pool:
scheduleAtFixedRate(Runnable task,long delay)
Das obige ist der detaillierte Inhalt vonSo implementieren Sie den eigenen Thread-Pool von Springboot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!