ThreadPoolExecutor - 1

"Programer biasa cepet utawa mengko teka karo kasunyatan sing padha duwe akeh tugas cilik sing kudu dileksanakake saka wektu kanggo wektu."

"Yen sampeyan nulis game, mula iku tumindak sing ditindakake dening karakter individu."

"Yen sampeyan nulis server web, mula ana prentah sing beda saka pangguna: upload foto, transcode menyang format sing dikarepake, aplikasi cithakan sing dikarepake, lsp."

"Cepat utawa mengko, kabeh tugas gedhe dipérang dadi sakumpulan tugas cilik sing bisa diatur."

"Dadi, diwenehi konteks iki, pitakonan subtle muncul: carane sampeyan kudu ngatur kabeh? Apa yen sampeyan kudu nindakake sawetara atus tugas ing menit? Nggawe thread kanggo saben tugas ora bakal nggawe akeh raos. Mesin Java nyedhiyakake cukup akeh sumber daya kanggo saben utas."

"Ing tembung liyane, nggawe lan ngrusak thread bisa mbutuhake wektu lan sumber daya luwih akeh tinimbang tugas kasebut."

"Pencipta Jawa nggawe solusi sing elegan kanggo masalah iki: ThreadPoolExecutor .

" ThreadPoolExecutor minangka kelas kanthi rong perkara ing njero:"

A)  Antrian tugas, sing bisa ditambahake tugas nalika muncul ing program kasebut.

B) Kolam benang, yaiku klompok benang sing nindakake tugas kasebut.

"Apa maneh, benang ora dirusak yen tugas rampung. Nanging, dheweke turu supaya siap miwiti tugas anyar nalika katon."

"Nalika sampeyan nggawe ThreadPoolExecutor , sampeyan bisa nyetel jumlah maksimum utas sing bakal digawe lan jumlah maksimum tugas sing bisa antri. Kanthi tembung liyane, sampeyan bisa mbatesi jumlah utas dadi 10, contone, lan jumlah tugas antri nganti 100."

"Iki cara kerja ThreadPoolExecutor :"

1)  Nalika sampeyan nambah tugas anyar, diselehake ing mburi antrian.

2)  Yen antrian kebak, pangecualian dibuwang.

3)  Sawise ngrampungake tugas, saben utas njupuk tugas sabanjure saka antrian lan miwiti nglakokake.

4) Yen ora ana tugas ing antrian, thread bakal turu nganti tugas anyar ditambahake.

"Pendekatan, ing ngendi kita mbatesi jumlah benang pekerja, mupangati amarga luwih akeh benang sing kita duwe, luwih akeh ngganggu saben liyane. kanggo nggawe 100 utas kanggo mundhake tugas, sing bakal saingan karo sumber daya: memori, wektu prosesor, akses database, lsp.

"Iki conto ThreadPoolExecutor ing tumindak:"

Tuladha
ExecutorService service = Executors.newFixedThreadPool(2);

for(int i = 0; i < 10; i++)
{
 service.submit(new Runnable() {
    public void run()
    {
     // Here we download something big from the Internet.
    }
 });
}

"Eh, aku ora weruh..."

" Obyek ThreadPoolExecutor digawe nalika metode newFixedThreadPool diarani."

Dadi, iku gampang banget kanggo nggunakake. Sanalika sampeyan nambahake tugas karo metode kirim, iku:

A)  Wakes thread turu, yen ana siji, kanggo nglakokaké tugas.

B)  Yen ora ana utas nunggu, banjur nggawe sing anyar kanggo tugas kasebut.

C)  Yen jumlah maksimum Utas wis tekan, banjur mung nempatno tugas ing mburi antrian.

"Aku sengaja nyakup «kene kita ngundhuh soko gedhe saka Internet» ing conto. Yen kita duwe 100 tugas «download soko gedhe saka Internet», banjur ora ana gunane kanggo mbukak akeh ing wektu sing padha-kita ' bakal dicekel maneh dening watesan bandwidth sambungan Internet kita. Ing kasus iki, sawetara thread kudu cukup. Iki sing sampeyan deleng ing conto ing ndhuwur:"

ExecutorService service = Executors.newFixedThreadPool(2);

"Pranyata yen nggarap akeh tugas ora angel banget."

"Ya. Malah luwih gampang tinimbang sing sampeyan bayangake. Nanging Kim bakal ngandhani sampeyan babagan iki."