Berikut adalah beberapa pertanyaan yang baru-baru ini saya tanyakan kepada orang yang diwawancarai yang mengatakan bahwa mereka tahu Java concurrency:
- Jelaskan bahaya "visibilitas memori" - cara JVM dapat menyusun ulang operasi tertentu pada variabel yang tidak dilindungi oleh monitor dan tidak dideklarasikan
volatile
, sehingga satu utas mungkin tidak melihat perubahan yang dilakukan oleh utas lain. Biasanya saya bertanya yang ini dengan menunjukkan kode di mana bahaya ini hadir (misalnyaNoVisibility
contoh pada Listing 3.1 dari "Java Concurrency in Practice" oleh Goetz et al) dan menanyakan apa yang salah. - Jelaskan bagaimana
volatile
pengaruhnya tidak hanya terhadap variabel aktual yang dideklarasikanvolatile
, tetapi juga setiap perubahan pada variabel yang dibuat oleh utas sebelum mengubahvolatile
variabel. - Mengapa Anda menggunakan
volatile
bukansynchronized
? - Menerapkan variabel kondisi dengan
wait()
dannotifyAll()
. Jelaskan mengapa Anda harus menggunakannyanotifyAll()
. Jelaskan mengapa variabel kondisi harus diuji denganwhile
loop.
Pertanyaan saya adalah - apakah ini tepat atau terlalu canggih untuk bertanya kepada seseorang yang mengatakan mereka tahu Java concurrency?
Dan sementara kita melakukannya, apakah Anda berpikir bahwa seseorang yang bekerja di Java concurrency seharusnya diharapkan memiliki pengetahuan di atas rata-rata tentang pengumpulan sampah Jawa?
notifyAll()
dengan "Saya tidak percaya dalam melakukan pekerjaan scheduler OS, jadi saya menggunakan notify()
"