sleep () adalah metode yang digunakan untuk menahan proses selama beberapa detik atau waktu yang Anda inginkan tetapi dalam kasus menunggu () utas metode berjalan dalam keadaan menunggu dan tidak akan kembali secara otomatis sampai kami memanggil pemberitahuan () atau beri tahuAll ().
Perbedaan utama adalah bahwa wait () melepaskan kunci atau monitor saat tidur () tidak melepaskan kunci atau monitor apa pun saat menunggu. Tunggu digunakan untuk komunikasi antar utas sementara tidur digunakan untuk memperkenalkan jeda saat eksekusi, secara umum.
Thread.sleep () mengirimkan utas saat ini ke status "Tidak Dapat Dijalankan" untuk beberapa waktu. Utas menjaga monitor yang telah diperolehnya - yaitu jika utas saat ini berada dalam blok atau metode yang disinkronkan, tidak ada utas lain yang bisa memasuki blok atau metode ini. Jika utas lain memanggil t.interrupt () ia akan mengaktifkan utas tidur. Perhatikan bahwa tidur adalah metode statis, yang berarti selalu mempengaruhi utas saat ini (salah satu yang menjalankan metode tidur). Kesalahan umum adalah memanggil t.sleep () di mana t adalah utas yang berbeda; meskipun begitu, itu adalah utas saat ini yang akan tidur, bukan utas.
object.wait () mengirimkan utas saat ini ke status "Tidak Dapat Dijalankan", seperti sleep (), tetapi dengan twist. Tunggu dipanggil pada objek, bukan utas; kami menyebut objek ini sebagai "objek kunci." Sebelum lock.wait () dipanggil, utas saat ini harus disinkronkan pada objek kunci; tunggu () kemudian lepaskan kunci ini, dan tambahkan utas ke "daftar tunggu" yang terkait dengan kunci tersebut. Kemudian, utas lain dapat disinkronkan pada objek kunci yang sama dan panggil kunci. Notify (). Ini membangunkan utas menunggu asli. Pada dasarnya, tunggu () / beri tahu () seperti sleep () / interrupt (), hanya utas aktif tidak perlu penunjuk langsung ke utas tidur, tetapi hanya ke objek kunci bersama.
synchronized(LOCK) {
Thread.sleep(1000); // LOCK is held
}
synchronized(LOCK) {
LOCK.wait(); // LOCK is not held
}
Biarkan kategorikan semua poin di atas:
Call on:
- wait (): Panggil objek; utas saat ini harus disinkronkan pada objek kunci.
- sleep (): Hubungi Thread; selalu menjalankan utas saat ini.
Synchronized:
- wait (): ketika beberapa utas yang disinkronkan mengakses Objek yang sama satu per satu.
- sleep (): ketika beberapa utas disinkronkan menunggu untuk tidur dari utas tidur.
Hold lock:
- wait (): lepaskan kunci agar benda lain memiliki kesempatan untuk mengeksekusi.
- sleep (): simpan kunci setidaknya t kali jika batas waktu ditentukan atau seseorang menyela.
Wake-up condition:
- wait (): sampai call notify (), notifyAll () dari object
- sleep (): hingga setidaknya waktu kedaluwarsa atau interupsi panggilan ().
Usage:
- sleep (): untuk sinkronisasi waktu dan;
- wait (): untuk sinkronisasi multi-utas.
Ref: diff sleep
danwait