Di Java, kumpulan benang digunakan untuk mengurus tugas seperti penciptaan, penyelenggaraan dan pemusnahan benang. Kolam benang mengandungi sekumpulan benang dan baris gilir tugasan Apabila tugasan perlu dilaksanakan, utas dalam kumpulan benang akan secara automatik mendapatkan tugas itu dan melaksanakannya Selepas tugasan dilaksanakan, utas itu juga akan dikitar semula ke kolam benang untuk digunakan semula.
API kumpulan benang dalam Java menyediakan kelas Pelaksana untuk membantu kami mencipta kumpulan benang dan menyediakan empat kaedah pelaksanaan kumpulan benang: FixedThreadPool, CachedThreadPool, SingleThreadExecutor dan ScheduledThreadPool.
FixedThreadPool
Sekumpulan utas bersaiz tetap akan dibuat untuk melaksanakan tugas hanya apabila bilangan utas yang berfungsi tidak mencapai saiz kumpulan benang. Kumpulan benang boleh menentukan bilangan maksimum utas melalui pembina Jika tidak dinyatakan, ia lalai kepada Integer.MAX_VALUE.
Kod sampel:
ExecutorService executorService = Executors.newFixedThreadPool(5); for (int i = 0; i < 10; i++) { executorService.execute(()->{ System.out.println(Thread.currentThread().getName()+" is executing task "); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); }
Hasil jalankan:
pool-1-thread-1 is executing task pool-1-thread-3 is executing task pool-1-thread-5 is executing task pool-1-thread-2 is executing task pool-1-thread-4 is executing task pool-1-thread-5 is executing task pool-1-thread-3 is executing task pool-1-thread-1 is executing task pool-1-thread-2 is executing task pool-1-thread-4 is executing task
CachedThreadPool
Komsil benang boleh cache, apabila bilangan utas melebihi bilangan yang diperlukan, Lebihan benang akan dikitar semula ke dalam kumpulan benang dan dimusnahkan secara automatik apabila tidak diperlukan lagi. Jika kumpulan benang tidak mempunyai benang yang tersedia dan tugasan baharu tiba, kumpulan benang akan mencipta urutan baharu untuk melaksanakan tugas sehingga saiz kumpulan benang mencapai had Integer.MAX_VALUE.
Kod sampel:
ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { executorService.execute(()->{ System.out.println(Thread.currentThread().getName()+" is executing task "); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); }
Hasil jalankan:
pool-1-thread-1 is executing task pool-1-thread-2 is executing task pool-1-thread-3 is executing task pool-1-thread-4 is executing task pool-1-thread-5 is executing task pool-1-thread-6 is executing task pool-1-thread-7 is executing task pool-1-thread-8 is executing task pool-1-thread-9 is executing task pool-1-thread-10 is executing task
SingleThreadExecutor
Komputeran utas tunggal, dengan hanya satu utas pekerja, boleh memastikan semua tugasan dilaksanakan seperti yang dinyatakan Dilaksanakan dalam susunan (FIFO, LIFO, keutamaan, dll.), bersamaan dengan FixedThreadPool khas.
Kod sampel:
ExecutorService executorService = Executors.newSingleThreadExecutor(); for (int i = 0; i < 10; i++) { executorService.execute(()->{ System.out.println(Thread.currentThread().getName()+" is executing task "); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); }
Hasil jalankan:
pool-1-thread-1 is executing task pool-1-thread-1 is executing task pool-1-thread-1 is executing task ......
ScheduledThreadPool
Suatu kumpulan benang berjadual yang boleh dijadualkan mengikut masa kelewatan yang ditetapkan atau secara berkala Kepada melaksanakan tugas, anda boleh melaksanakan tugas berjadual atau tugas berkala. Saiz kumpulan benang boleh ditentukan Jika tidak dinyatakan, ia lalai kepada Integer.MAX_VALUE.
Kod sampel:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3); ScheduledFuture<?> future = scheduledExecutorService.schedule(()->{ System.out.println(Thread.currentThread().getName()+" is executing delay task "); }, 5, TimeUnit.SECONDS); scheduledExecutorService.scheduleAtFixedRate(()->{ System.out.println(Thread.currentThread().getName()+" is executing periodic task "); }, 2, 3, TimeUnit.SECONDS);
Hasil berjalan:
pool-1-thread-1 is executing periodic task pool-1-thread-2 is executing periodic task pool-1-thread-3 is executing periodic task pool-1-thread-1 is executing periodic task pool-1-thread-3 is executing periodic task pool-1-thread-2 is executing periodic task pool-1-thread-3 is executing periodic task pool-1-thread-2 is executing periodic task ...... pool-1-thread-1 is executing delay task
Ringkasan
Kolam benang ialah konsep yang sangat penting dalam pembangunan berbilang benang dan boleh Mengurangkan dengan berkesan overhed penciptaan benang, pemusnahan dan penukaran konteks, dan meningkatkan prestasi sistem dan kebolehselenggaraan. Java menyediakan kelas Pelaksana untuk membuat kumpulan benang dengan mudah, dan menyediakan kaedah pelaksanaan yang berbeza untuk menangani senario aplikasi yang berbeza. Apabila pembangun menggunakan kumpulan benang, mereka perlu memilih kaedah pelaksanaan yang sesuai berdasarkan keperluan khusus dan keadaan pemuatan untuk mencapai prestasi dan kesan terbaik.
Atas ialah kandungan terperinci Kolam benang di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!