JavaRush /Java Blog /Random-ID /Level 25. Jawaban pertanyaan wawancara pada topik level
zor07
Level 31
Санкт-Петербург

Level 25. Jawaban pertanyaan wawancara pada topik level

Dipublikasikan di grup Random-ID
Level 25. Jawaban pertanyaan wawancara tentang topik level - 1
  1. Apa saja keadaan benda tersebut Thread?

    • BARU
    • DAPAT DIJALANKAN
    • DIBLOKIR
    • MENUNGGU
    • WAKTU_MENUNGGU
    • DIHENTIKAN
  2. Status apa yang bisa dituju oleh sebuah thread ketika memasuki sebuah blok synchronized?

    • DAPAT DIJALANKAN
    • DIBLOKIR

    Di RUNNABLE, jika blok kode yang ditandai synchronizedtidak ditempati oleh thread lain. Jika tidak, thread kita akan menerima status BLOCKED dan akan menunggu objek mutex dilepaskan.

  3. Keadaan apa yang akan dituju oleh thread ketika memanggil metode ini wait()?

    Memanggil metode ini akan menempatkan thread dalam status WAITING.
    Metode ini wait()hanya dapat dipanggil di dalam blok synchronizedpada 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 dipanggil wait(), thread saat ini melepaskan kunci dari objek monitordan memasuki status WAITING, menunggu metode dipanggil monitor.notify()oleh monitor.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.

  4. Keadaan apa yang akan dituju oleh thread ketika memanggil metode ini wait(500)?

    Memanggil metode ini akan menempatkan thread dalam status TIMED_WAITING.
    Dengan analogi metode ini wait(), wait(timeout)metode ini hanya dapat dipanggil di dalam blok synchronizedpada 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 objek monitordan tertidur selama 500 milidetik. Objek tersebut monitormungkin ditangkap oleh thread lain.
    Setelah 500 milidetik, utas akan aktif dan jika monitortidak 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 itu monitor.wait(), thread akan masuk ke status WAITING. Sebuah metode notify()yang dipanggil oleh thread lain pada suatu objek monitorakan memindahkan thread dari status WAITING ke status RUNNABLE kecuali objek monitor ditangkap oleh thread lain, jika tidak, ke status BLOCKED.

  5. 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.

  6. Tiga thread di blok tersinkronisasi disebut wait()objek mutex. Ke keadaan manakah thread ini akan menuju jika thread keempat memanggil notifyAll()?

    Dua di antaranya akan masuk ke status BLOCKED, satu ke status RUNNABLE

  7. Apa bedanya join(500)dengan wait(500)?

    Terlepas dari kenyataan bahwa dan join(500)akan wait(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 metodenya join()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.

  8. Apa bedanya wait(500)dengan sleep(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.

  9. Keadaan apa yang akan dituju oleh thread ketika memanggil metode ini yield()?

    Ketika suatu metode dipanggil yield(), thread saat ini “melewati gilirannya” dan java segera beralih untuk mengeksekusi thread berikutnya. Utas berpindah dari satu negara bagian runningke negara bagian lainnya ready. Status berjalan & siap adalah substatus dari status RUNNABLE.

PS Komentar, tambahan, koreksi, komentar dipersilakan =)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION