Rumah  >  Artikel  >  Java  >  Kolam benang di Jawa

Kolam benang di Jawa

WBOY
WBOYasal
2023-06-15 20:51:481400semak imbas

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn