Artikel ini memperkenalkan konfigurasi thread thread thread spring threadpooltaskexecutor, dan membagikannya dengan Anda, sebagai berikut:
1. ThreadPooltaskExecutor Configuration
<!-Eksekutor Pool Thread Spring-> <bean id = "Taskexecutor"> <!-Jumlah minimum utas yang dikelola oleh kumpulan utas-> <nama properti = "corePoolsize" value = "5" /> <!-waktu idle yang diizinkan-> <nama properti = "namanya ke-neads (value" value = "200" /> <!-Sejumlah maksimum "NAMA" = "POLISEOL" Nilai POLIK-"200" /> <!-Sejumlah maksimum "NAMA-NAMA" POLACET "POLIK" POLIK "200" /<! /> <!-Antrian cache-> <nama properti = "queuecapacity" value = "20" /> <!-Penanganan kebijakan untuk menolak tugas-> <name properti = "RejectExecutionHandler"> <bean /> </prop Propert> < /bean>
Deskripsi bidang atribut
CorePoolsize: Jumlah minimum utas yang dikelola oleh kumpulan benang
Keepaliveseconds: Diizinkan waktu luang
MAXPOOLSIZE: Jumlah maksimum utas yang dikelola berdasarkan kumpulan utas
Queuecapacity: antrian cache
REDITEDEXECUTECHANDLER: Menangani strategi untuk menolak tugas
2. Eksekusi (dapat dijalankan) Proses Eksekusi Metode
Jika jumlah kumpulan utas kurang dari corePoolsize saat ini, bahkan jika utas di kumpulan utas semuanya menganggur, utas baru harus dibuat untuk menangani tugas yang ditambahkan.
Jika angka di kumpulan utas sama dengan corePoolsize, tetapi workqueue antrian buffer tidak penuh, maka tugas ditempatkan dalam antrian buffer.
Jika jumlah kumpulan utas lebih besar dari corePoolsize saat ini, workqueue antrian buffer penuh, dan jumlah kumpulan benang kurang dari maxpoolsize, buat utas baru untuk menangani tugas yang ditambahkan.
Jika angka di kumpulan utas lebih besar dari corePoolsize saat ini, workqueue antrian buffer penuh, dan angka di kumpulan utas sama dengan maxpoolsize, maka tugas ini ditangani melalui kebijakan yang ditentukan oleh penangan. Artinya, prioritas penanganan tugas adalah: corePoolsize utas inti, workqueue antrian tugas, maksimal maksimum maximumpoolSize. Jika ketiganya penuh, gunakan pawang untuk menangani tugas yang ditolak.
Ketika jumlah utas di kumpulan utas lebih besar dari corePoolsize, jika utas menganggur lebih dari Keepalivetime, utas akan diakhiri. Dengan cara ini, kumpulan utas dapat secara dinamis menyesuaikan jumlah utas di kolam.
3. Kode sampel
Tes junit
@Runwith (springjunit4classrunner.class) @contextConfiguration (class = {multithReadConfig.class}) kelas publik multithreadtest {@autowired private threadpooltaskexecutor Taskexecutor; @Autowired swasta multithreadprocessservice multithreadprocessservice; @Test public void test () {int n = 20; untuk (int i = 0; i <n; i ++) {taskexecutor.execute (multithreaddemo baru (multithreadprocessservice)); System.out.println ("int i is" + i + ", sekarang ThreadPool Active Threads TotalNum adalah" + taskexecutor.getActiveCount ()); } coba {System.in.read (); } catch (ioException e) {lempar runtimeException baru (e); }}}MULTITHREADDEMO
/** * Multithread Demo Pemrosesan Bersamaan * @Author Daniel.zhao * */Kelas Publik MultithreadDemo mengimplementasikan runnable {private MULTITHREADPROCESSSERVICE MULTITHREADPROCESSSERVICE; Public MulTithReadDemo () {} Public MulTithReadDemo (MultithReadProcessService MultithReadProcessService) {this.multithReadProcessService = multithReadProcessService; } @Override public void run () {multithreadprocessservice.processsomething (); }}Multithreadprocessservice
@ServICEPUBLIC CLASS MULTITHREADPROCESSSERVICE {Public Static Final Logger Logger = Logger.GetLogger (MultithReadProcessService.class); / ** * Proses pemrosesan default membutuhkan 1000ms */ public void Processsomething () {Logger.Debug ("MultithreadProcessService-ProcessSomething" + thread.currentThread () + "...... start"); coba {thread.sleep (1000); } catch (InterruptedException e) {lempar runtimeException baru (e); } Logger.debug ("MultithreadProcessService-ProcessSomething" + thread.currentThread () + "...... end"); }}MULTITHREADCONFIG
@Configuration @componentscan (basepackages = {"com.xxx.multithread"}) @importresource (value = {"classpath: config/application-task.xml"}) @EnablesCheduling kelas publik multithReadConfig {}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.