-
Apa saja keadaan benda tersebut
Thread
?- BARU
- DAPAT DIJALANKAN
- DIBLOKIR
- MENUNGGU
- WAKTU_MENUNGGU
- DIHENTIKAN
-
Status apa yang bisa dituju oleh sebuah thread ketika memasuki sebuah blok
synchronized
?- DAPAT DIJALANKAN
- DIBLOKIR
Di RUNNABLE, jika blok kode yang ditandai
synchronized
tidak ditempati oleh thread lain. Jika tidak, thread kita akan menerima status BLOCKED dan akan menunggu objek mutex dilepaskan. - Keadaan apa yang akan dituju oleh thread ketika memanggil metode ini
wait()
?Memanggil metode ini akan menempatkan thread dalam status WAITING.
Metode iniwait()
hanya dapat dipanggil di dalam bloksynchronized
pada objek mutex yang telah "dikunci" oleh thread saat ini, jika tidak, metode tersebut akan memunculkan pengecualian IllegalMonitorStateException .Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
Ketika suatu metode dipanggilwait()
, thread saat ini melepaskan kunci dari objekmonitor
dan memasuki status WAITING, menunggu metode dipanggilmonitor.notify()
olehmonitor.notifyAll()
thread lain. Segera setelah ini terjadi, utas akan aktif dan jika monitor tidak sibuk, utas akan mengambilnya dan terus bekerja.
Jika monitor ditempati oleh thread lain, thread saat ini akan masuk ke status BLOCKED. -
Keadaan apa yang akan dituju oleh thread ketika memanggil metode ini
Memanggil metode ini akan menempatkan thread dalam status TIMED_WAITING.wait(500)
?
Dengan analogi metode iniwait()
,wait(timeout)
metode ini hanya dapat dipanggil di dalam bloksynchronized
pada objek mutex yang telah “dikunci (dikunci)” oleh thread saat ini.Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(500); … }
Saat memanggil metode ini
wait()
, thread saat ini melepaskan kunci dari objekmonitor
dan tertidur selama 500 milidetik. Objek tersebutmonitor
mungkin ditangkap oleh thread lain.
Setelah 500 milidetik, utas akan aktif dan jikamonitor
tidak sibuk, utas akan mengambilnya dan terus bekerja.
Jika monitor ditempati oleh thread lain, thread saat ini akan masuk ke status BLOCKED.Keadaan apa yang akan dituju oleh thread ketika memanggil metode ini
notify()
?Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
Setelah itumonitor.wait()
, thread akan masuk ke status WAITING. Sebuah metodenotify()
yang dipanggil oleh thread lain pada suatu objekmonitor
akan memindahkan thread dari status WAITING ke status RUNNABLE kecuali objek monitor ditangkap oleh thread lain, jika tidak, ke status BLOCKED. -
Keadaan apa yang akan dituju oleh thread ketika memanggil metode ini
notifyAll()
?notifyAll()
"akan tetap" semua utas. Salah satu dari semua thread "tidur" (WAITING) akan masuk ke status RUNNABLE, mengambil alih monitor objek yang sedang digunakan dan melanjutkan pekerjaannya. Selebihnya akan dalam keadaan DIBLOKIR. Segera setelah thread “bangun” pertama melepaskan monitor, yang ditunggu-tunggu semua orang, nasibnya akan diulangi oleh thread berikutnya (thread sewenang-wenang akan berpindah dari status BLOCKED ke status RUNNABLE). Ini akan berlanjut sampai semua thread yang "terbangun" meninggalkan status BLOCKED. -
Tiga thread di blok tersinkronisasi disebut
Dua di antaranya akan masuk ke status BLOCKED, satu ke status RUNNABLEwait()
objek mutex. Ke keadaan manakah thread ini akan menuju jika thread keempat memanggilnotifyAll()
? -
Apa bedanya
Terlepas dari kenyataan bahwa danjoin(500)
denganwait(500)
?join(500)
akanwait(500)
mentransfer utas saat ini ke status TIMED_WAITING, ada perbedaan signifikan di antara keduanya:join(500)
dipanggil pada utas,wait(500)
dipanggil di dalam blok yang disinkronkan pada objek di mana blok ini disinkronkan.
Saat dipanggil,join(500)
thread saat ini akan menunggu 500 milidetik hingga thread yang metodenyajoin()
dipanggil selesai.
Saat dipanggil,wait(500)
thread saat ini akan melepaskan kunci dari objek yang disinkronkan dan tertidur selama 500 milidetik.
Setelah 500 milidetik, dalam kedua kasus, thread akan terus berfungsi. -
Apa bedanya
wait(500)
dengansleep(500)
?sleep(500)
dipanggil pada thread,wait(500)
dipanggil di dalam blok yang disinkronkan pada objek di mana blok ini disinkronkan.
Saat dipanggil,sleep(500)
thread saat ini akan menunggu 500 milidetik, lalu melanjutkan pekerjaannya.
Saat dipanggil,wait(500)
thread saat ini akan melepaskan kunci dari objek yang disinkronkan dan tertidur selama 500 milidetik. -
Keadaan apa yang akan dituju oleh thread ketika memanggil metode ini
Ketika suatu metode dipanggilyield()
?yield()
, thread saat ini “melewati gilirannya” dan java segera beralih untuk mengeksekusi thread berikutnya. Utas berpindah dari satu negara bagianrunning
ke negara bagian lainnyaready
. Status berjalan & siap adalah substatus dari status RUNNABLE.
GO TO FULL VERSION