Dalam beberapa kasus, kita perlu menetapkan kumpulan utas yang berbeda untuk menjalankan beberapa tugas dalam proyek. Oleh karena itu, tugas yang berbeda dikendalikan dengan memantau kumpulan benang yang berbeda. Untuk mencapai hal ini, kumpulan multi-threaded harus dikonfigurasi dalam proyek.
Spring Boot menyediakan solusi konfigurasi dan penggunaan kumpulan utas yang sederhana dan efisien.
Konfigurasi
Pertama, konfigurasikan biji kumpulan utas untuk diserahkan kepada manajemen musim semi:
@ConfigurationPublic kelas Taskexecutepool {@bean (name = "threadpoola") Public ThreadPooltaskexutormytaskasyncpool () {threadPoolTaskexecutor Executor = new ThreadPoolTaskeCecutor (); Executor.setCorepoolSize (4); Executor.SetMaxPoolSize (8); Executor.setqueuecapacity (100); Executor.setkeepaliveseconds (60); Executor.setThreadnameprefix ("Pool-A"); executor.setRECTEDExecutionHandler (ThreadPoolExecutor.callerrunspolicy ()) baru; Executor.Initialize (); Return Executor; } @Bean (name = "threadpoolb") Public ThreadPoolTaskeCutorAsyncpoolB () {threadPooltaskExecutor Executor = new ThreadPooltaskexecutor (); Executor.setCorepoolSize (2); Executor.setMaxPoolSize (4); Executor.setqueuecapacity (8); Executor.setkeepaliveseconds (60); Executor.setThreadnameprefix ("Pool-B"); // Kebijakan yang digunakan ketika jumlah tugas melebihi maxpoolsize dan queuecapacity. Kebijakan ini adalah untuk memanggil utas tugas untuk mengeksekusi executor.setRECTEDExecutionHandler (new ThreadPoolExecutor.CallerRunSpolicy ()); Executor.Initialize (); Return Executor; }} menggunakan
Menggunakan utas hanya memerlukan anotasi pada metode eksekusi, dan kelas metode harus didefinisikan sebagai kacang dan diserahkan ke pegas untuk dikelola.
Anda dapat menggunakan anotasi @component, @service, dll. Di kelas
@Async (value = "threadpoola") public void Taska () {...} Periksa jumlah utas yang aktif:
@Autowired Private ThreadPooltaskExecutor Threadpoola; // Nama variabel adalah nama nama kacang biliar utas yang ditentukan. public void checkavtivethreadnum () {int num = threadpoola.getactiveCount ();}Tentu saja ada metode lain, jadi saya tidak akan memberikan contoh di sini.
Memahami setiap atribut kumpulan utas:
CorePoolsize: mewakili utas inti kumpulan utas, dan jumlah utas yang dibuka dalam keadaan normal.
Queuecapacity: Ketika utas inti sedang menjalankan tugas, masih ada tugas tambahan yang akan disimpan di sini.
MAXPOOLSIZE: Jika queuecapacity penuh, lebih banyak utas akan dimulai sampai jumlah utas mencapai maxpoolsize. Jika masih ada tugas, itu akan diproses sesuai dengan kebijakan penolakan.
Ada banyak strategi penolakan:
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.