Kita semua tahu bahwa di Java, ada dua sarana untuk mencapai multi -utara, satu adalah untuk melanjutkan kelas utas, dan yang lainnya adalah mengimplementasikan antarmuka yang dapat dijalankan.
1. Apa perbedaan antara proses dan utas?
Prosesnya adalah aplikasi eksekusi, dan utasnya adalah urutan eksekusi dalam proses. Satu proses dapat memiliki banyak utas. Utas juga disebut proses ringan.
2. Berapa banyak cara berbeda untuk membuat utas? Yang mana yang kamu suka? Mengapa?
Ada tiga cara untuk membuat utas:
(1) mewarisi kelas utas (2) Implementasi aplikasi Runnable Interface (3) dapat menggunakan kerangka kerja Executor untuk membuat kumpulan utas untuk mencapai antarmuka yang dapat dilalui. Dalam desain aplikasi yang mewarisi objek lain, ini membutuhkan lebih banyak warisan (dan Java tidak mendukung lebih banyak warisan) dan hanya dapat mencapai antarmuka. Pada saat yang sama, kumpulan utas juga sangat efisien dan mudah dicapai dan digunakan.
3. Penjelasan ringkasan dari beberapa penggunaan utas.
Selama proses eksekusi, utas dapat dalam keadaan berikut:
Runnable: Utas siap untuk dijalankan, dan mungkin tidak segera dieksekusi.
Menjalankan: Prosesnya mengeksekusi kode utas.
Menunggu: Thread dalam keadaan obstruksi, menunggu perawatan eksternal.
Tidur: Thread dipaksa tidur.
Blok I/O (diblokir pada I/O): Menunggu operasi I/O.
Diblokir pada sinkronisasi: Tunggu kunci.
Kematian: Utas dieksekusi.
4. Apa perbedaan antara metode sinkronisasi dan blok kode sinkron?
Dalam bahasa Java, setiap objek memiliki kunci. Utas dapat menggunakan kata kunci yang disinkronkan untuk mendapatkan kunci pada objek. Kata kunci yang disinkronkan dapat diterapkan pada level metode (kunci granular kasar) atau tingkat blok kode (kunci partikel -fine).
5. Di monitor (monitor), bagaimana hal itu melakukan sinkronisasi utas? Tingkat sinkronisasi apa yang harus dilakukan program?
Monitor dan kunci digunakan di mesin virtual Java. Monitor memantau blok kode sinkron untuk memastikan bahwa hanya ada satu utas untuk menjalankan blok kode sinkron sekaligus. Setiap monitor dikaitkan dengan referensi objek. Utas tidak mengizinkan kode sinkronisasi eksekusi sebelum mendapatkan kunci.
6. Apa itu kebuntuan?
Kedua proses menunggu pihak lain untuk dieksekusi sebelum mereka dapat terus mengeksekusi. Akibatnya, kedua proses menunggu tanpa batas.
7. Bagaimana cara memastikan bahwa N utas dapat mengakses sumber daya N sementara tidak mengarah ke kunci mati?
Saat menggunakan beberapa utas, cara yang sangat sederhana untuk menghindari kunci mati adalah dengan menentukan urutan mendapatkan kunci, dan utas paksa untuk mendapatkan kunci dalam urutan yang ditentukan. Oleh karena itu, jika semua utas dikunci dan dilepaskan dalam urutan yang sama, tidak akan ada kunci mati.