"Hai, Amigo!"

"Sekarang saya akan memberi tahu Anda sedikit tentang metode tidur, menghasilkan, dan bergabung."

"Itu membosankan. Saya baru saja menemukan pertanyaan wawancara: 'Apa perbedaan antara metode hasil (), tidur (), dan tunggu ()?'. Bisakah Anda menjelaskannya?"

"Tidak masalah. Pertama, ini adalah tiga metode yang sama sekali berbeda."

1) sleep(timeout)  – menghentikan thread saat ini (di mana sleep dipanggil) untuk jumlah milidetik yang ditunjukkan oleh parameter timeout. Utas kemudian masuk ke status TIMED_WAITING. Metode ini mungkin berakhir lebih awal jika flag isInterrupted disetel.

Contoh Keterangan
Thread.sleep(500);
Utas saat ini menangguhkan eksekusinya sendiri selama 500 milidetik, atau 0,5 detik.

2) hasil ()  - utas saat ini 'melewati gilirannya'. Utas beralih dari status berjalan ke status siap , dan JVM melanjutkan ke utas berikutnya. Status berjalan dan siap adalah sub-status dari status DAPAT DIJALANKAN .

Contoh Keterangan
Thread.yield();
Utas saat ini "melewati gilirannya" dan Java segera beralih ke utas berikutnya.

3) wait(timeout)  – ini adalah versi dari metode wait (), tetapi dengan timeout. " Metode tunggu hanya dapat dipanggil dalam blok yang disinkronkan pada objek mutex yang dikunci oleh utas saat ini. Jika tidak, metode ini akan melempar Pengecualian MonitorState Ilegal .

"Memanggil metode ini menyebabkan kunci objek mutex dilepaskan, membuatnya tersedia untuk diperoleh utas lain. Selain itu, utas memasuki status WAITING (untuk metode wait() tanpa parameter) atau status TIMED_WAITING (untuk status wait(timeout ) metode)."

Contoh Keterangan
Object monitor = getMonitor();
synchronized(monitor)
{
 …
 monitor.wait(500);
 …
}
Saat metode tunggu dipanggil, utas saat ini melepaskan kunci objek monitor, dan tidur selama 500 milidetik. Objek monitor dapat diperoleh dengan utas lain.
Setelah 500 milidetik, utas akan aktif dan jika monitor tidak sibuk, utas akan memperolehnya dan terus bekerja.
Jika monitor dikunci oleh utas lain, utas saat ini akan beralih ke status DIBLOKIR.

4) bergabung (batas waktu)

"Metode ini tidak ada dalam pertanyaan Anda, tetapi ada dalam rencana pelajaran saya, jadi saya akan memberi tahu Anda tentangnya. Saat Anda memanggil metode join() atau join(timeout), utas saat ini 'dilampirkan' ke Utas yang memanggil metode ini. Utas saat ini akan tidur dan menunggu hingga utas yang digabungkan selesai (yaitu utas yang metode join()-nya dipanggil)."

"Utas saat ini memasuki status WAITING untuk metode join() dan status TIMED_WAITING untuk metode join(timeout)."

Contoh Keterangan
Thread thread = getWorkThread();
thread.join(500);
Utas saat ini akan bergabung dengan utas pekerja dan menunggu hingga berakhir.
Tapi itu akan 'lepas' setelah 500 milidetik dan terus berjalan.

"Batas waktu dalam metode wait(timeout) dan join(timeout) berarti bahwa metode tersebut tidur dan menunggu sesuatu, tetapi tidak lebih dari batas waktu yang diberikan dalam milidetik. Kemudian ia bangun."

"Sepertinya satu-satunya kesamaan metode ini adalah batas waktu. Mereka melakukan hal yang sama sekali berbeda."

"Ya, itu benar."