Masalah detail multithreaded
Persamaan dan perbedaan antara metode tidur dan metode tunggu?
Kesamaan:
Tinggalkan utas dalam keadaan beku.
Perbedaan:
Tidur harus menentukan waktu
tunggu dapat menentukan waktu atau tidak
Waktu tidur sudah habis, utasnya dalam keadaan pemblokiran sementara atau keadaan berjalan
Jika tunggu tidak punya waktu, itu harus dibangunkan melalui notify atau notifyall
Tidur tidak harus didefinisikan dalam sinkronisasi
Tunggu harus didefinisikan dalam sinkronisasi
Ketika semua didefinisikan dalam sinkronisasi
Tidur melepaskan hak eksekusi, bukan kunci
tunggu untuk melepaskan hak eksekusi, kunci
syschronized (obj) {tunggu (); // 0 1 2 kode ...} syschronized (obj) {notifyall (); // 3 kode ...}Bagaimana cara menghentikan utas
Metode berhenti
Metode berhenti sudah ketinggalan zaman. Saya menemukan bahwa ada solusi lain setelah membaca deskripsi.
Ujung Thread: Biarkan kode tugas utas dijalankan dan metode run berakhir
Bagaimana cara mengakhiri metode lari?
Dengan mendefinisikan loop
Catatan: Bisakah dia tetap menilai tanda jika utasnya dalam keadaan beku dalam tugas?
Keadaan interupsi yang disebut tidak berarti menghentikan utas.
Status interupsi interupsi menyebabkan jika utas target menunggu lama, metode interupsi harus digunakan untuk mengganggu penantian untuk apa yang disebut interupsi adalah tidak menghentikan utas.
Fungsi interupsi adalah untuk menghapus status pembekuan utas dan mengembalikan status yang berjalan ke utas (biarkan utas memkualifikasi kembali untuk eksekusi CPU).
Karena wajib, akan ada pengecualian interrupted exception, dan Anda dapat menangkap pengecualian dalam tangkapan.
Dalam penanganan pengecualian, ubah tanda untuk mengakhiri loop dan biarkan metode run berakhir.
Benang daemon
Utas daemon: Ini juga dapat dipahami sebagai utas latar belakang, dan utas latar depan yang dibuat sebelumnya adalah semua utas latar depan.
Selama utas memanggil setdaemon (true); Benang dapat ditandai sebagai benang daemon.
Utas latar belakang front-end sama saat berjalan, mendapatkan hak eksekusi CPU.
Hanya ketika itu berakhir sedikit berbeda.
Utas latar depan harus diakhiri melalui metode run dan utas harus berakhir.
Utas latar belakang juga dapat diakhiri dengan metode run, dan utas berakhir. Ada situasi lain.
Ketika semua utas latar depan di akhir proses, tidak peduli apa keadaan utas latar belakang, itu akan berakhir, dan prosesnya akan berakhir.
Proses berakhir dengan utas latar depan semua bergantung pada.
Prioritas utas
Prioritas Thread: Diidentifikasi oleh angka, 1-10
Di antara mereka, prioritas awal default adalah 5 dan tiga tingkat prioritas yang paling jelas adalah 1, 5, dan 10.
setPriority (thread.max_priority);
Grup utas
Grup Thread: ThreadGroup: Grup utas yang dimiliki oleh objek utas baru dapat diidentifikasi melalui konstruktor utas.
Manfaat dari grup utas adalah bahwa mereka dapat melakukan operasi terpadu pada beberapa utas dalam grup yang sama.
Secara default, mereka semua termasuk dalam kelompok utas utama.
Kelas internal anonim
Runnable rn = runnable baru () {public void run () {}}; // Kode di atas setara dengan kelas anomymous implement runnable {public void run () {}} runnable rn = new anomymous ();Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!