"Halo, Amigo!"

"Saiki aku bakal ngandhani sampeyan babagan cara turu, ngasilake, lan gabung."

"Sing mboseni. Aku mung nemokake pitakonan wawancara: 'Apa bedane antarane metode ngasilake (), turu (), lan ngenteni ()?'. Apa sampeyan bisa nerangake?"

"Ora masalah. Kaping pisanan, iki telung cara sing beda."

1) turu (wektu entek)  - mungkasi thread saiki (sing diarani turu) kanggo jumlah milliseconds sing dituduhake dening parameter wektu entek. Utas banjur dadi status TIMED_WAITING. Cara kasebut bisa rampung luwih dhisik yen gendera isInterrupted disetel.

Tuladha Katrangan
Thread.sleep(500);
Utas saiki nundha eksekusi dhewe sajrone 500 milidetik, utawa 0,5 detik.

2) ngasilaken ()  - thread saiki 'skip giliran'. Utas dadi saka negara mlaku menyang negara siap , lan JVM nerusake menyang thread sabanjure. Negara mlaku lan siap minangka sub-negara saka negara RUNNABLE .

Tuladha Katrangan
Thread.yield();
Utas saiki "skip giliran" lan Jawa langsung ngalih menyang utas sabanjure.

3) ngenteni (wektu entek)  - iki versi metode ngenteni (), nanging karo wektu entek. " Cara ngenteni mung bisa diarani ing blok sing disinkronake ing obyek mutex sing dikunci dening benang saiki. Yen ora, metode kasebut mbuwang Pengecualian MonitorState Illegal .

"Nelpon metode iki nyebabake kunci obyek mutex dibebasake, dadi kasedhiya kanggo thread liyane kanggo entuk. Kajaba iku, thread mlebu status WAITING (kanggo metode wait() tanpa parameter) utawa status TIMED_WAITING (kanggo ngenteni (wektu entek). ) metode).

Tuladha Katrangan
Object monitor = getMonitor();
synchronized(monitor)
{
 …
 monitor.wait(500);
 …
}
Nalika cara ngenteni diarani, thread saiki ngeculake kunci obyek monitor, lan turu kanggo 500 milliseconds. Objek monitor bisa dipikolehi kanthi benang liyane.
Sawise 500 milidetik, benang bakal tangi lan yen monitor ora sibuk, benang bakal entuk lan terus digunakake.
Yen monitor dikunci dening thread liyane, thread saiki bakal pindhah menyang negara BLOCKED.

4) gabung (wektu entek)

"Cara iki ora ana ing pitakonan sampeyan, nanging ana ing rencana pelajaran, mula aku bakal ngandhani sampeyan. Nalika sampeyan nelpon metode gabung () utawa gabung (wektu entek), thread saiki 'disambungake' menyang Utas. sing diarani metode iki. Utas saiki turu lan ngenteni nganti benang disambung rampung (yaiku benang sing diarani metode gabung ()).

"Utas saiki mlebu status WAITING kanggo metode gabung () lan status TIMED_WAITING kanggo metode gabung (wektu entek)."

Tuladha Katrangan
Thread thread = getWorkThread();
thread.join(500);
Utas saiki bakal gabung karo utas workerThread lan ngenteni nganti rampung.
Nanging bakal 'ujoin' sawise 500 milliseconds lan terus mlaku.

"Wektu entek ing Enteni (wektu entek) lan gabung (wektu entek) cara tegese cara dadi turu lan ngenteni soko, nanging ora luwih saka wektu entek diwenehi ing milliseconds. Banjur tangi."

"Koyone mung siji-sijine cara iki sing umum yaiku wektu entek. Dheweke nindakake perkara sing beda-beda."

"Ya, pancen bener."