Adakah yang bisa memberi tahu saya apa thread daemon di Jawa ?
java
multithreading
kursi goyang
sumber
sumber
Thread
javadoc menggambarkan apa yang mereka: java.sun.com/javase/6/docs/api/java/lang/Thread.htmlJawaban:
Utas daemon adalah utas yang tidak mencegah JVM keluar saat program selesai tetapi utas masih berjalan. Contoh untuk thread daemon adalah pengumpulan sampah.
Anda dapat menggunakan
setDaemon(boolean)
metode ini untuk mengubahThread
properti daemon sebelum utas dimulai.sumber
setDamon(boolean)
hanya bisa dipanggil sebelum utas dimulai. Secara default utas mewarisi status daemon utas induknya.thread that does not prevent the JVM from exiting when the program finishes but the thread is still running
pada dasarnya berarti proses JVM yang memulai utas tidak peduli apakah daemon utas selesai dijalankan atau tidak, itu hanya akan berakhir sendiri jika semua utas normal telah selesai dieksekusi.Beberapa poin lagi (Referensi: Java Concurrency in Practice )
Ketika semua utas non-daemon selesai, JVM berhenti, dan utas daemon lainnya ditinggalkan :
Karena alasan ini, daemon thread harus digunakan dengan hemat, dan berbahaya untuk menggunakannya untuk tugas-tugas yang dapat melakukan segala jenis I / O.
sumber
finally
blok yang dieksekusi, terlepas dari apakah utas itu daemon atau bukan. Jadi jangan panggilSystem.exit(…)
jika Anda berpikir mungkin ada utas yang menjalankan I / O. Satu-satunya perbedaan adalah bahwa JVM akan memicu penghentian sendiri ketika hanya daemon thread yang tersisa.Semua jawaban di atas baik. Berikut cuplikan kode kecil sederhana, untuk menggambarkan perbedaannya. Cobalah dengan masing-masing nilai true dan false in
setDaemon
.sumber
Secara tradisional proses daemon di UNIX adalah proses yang terus berjalan di latar, seperti halnya layanan di Windows.
Daemon thread di Java adalah salah satu yang tidak mencegah JVM keluar. Secara khusus JVM akan keluar ketika hanya daemon thread yang tersisa. Anda membuatnya dengan memanggil
setDaemon()
metodeThread
.Baca thread Daemon .
sumber
Utas daemon seperti penyedia layanan untuk utas atau objek lain yang berjalan dalam proses yang sama dengan utas daemon. Utas daemon digunakan untuk tugas pendukung latar belakang dan hanya diperlukan saat utas normal dijalankan. Jika utas normal tidak berjalan dan utas yang tersisa adalah utas daemon maka juru bahasa keluar.
Misalnya, browser HotJava menggunakan hingga empat untaian daemon bernama "Pengambil Gambar" untuk mengambil gambar dari sistem file atau jaringan untuk utas apa pun yang memerlukannya.
Thread daemon biasanya digunakan untuk melakukan layanan untuk aplikasi / applet Anda (seperti memuat "bit fiddley"). Perbedaan utama antara utas pengguna dan utas daemon adalah bahwa JVM hanya akan mematikan program ketika semua utas pengguna telah dihentikan. Utas daemon diakhiri oleh JVM ketika tidak ada lagi utas pengguna yang berjalan, termasuk utas utama eksekusi.
setDaemon (benar / salah)? Metode ini digunakan untuk menentukan bahwa utas adalah daemon utas.
public boolean isDaemon ()? Metode ini digunakan untuk menentukan utas apakah daemon utas atau tidak.
Misalnya:
Keluaran:
sumber
Definisi Daemon (Komputasi):
—— Sumber: Kamus Inggris oleh Oxford
Apa itu Daemon thread di Jawa?
sumber
Sebuah benang daemon adalah benang yang dianggap melakukan beberapa tugas di latar belakang seperti permintaan penanganan atau berbagai chronjobs yang bisa eksis dalam sebuah aplikasi.
Ketika program Anda hanya memiliki sisa daemon, ia akan keluar. Itu karena biasanya utas ini bekerja sama dengan utas normal dan memberikan latar belakang penanganan acara.
Anda dapat menentukan bahwa a
Thread
adalah daemon satu dengan menggunakansetDaemon
metode, mereka biasanya tidak keluar, mereka juga tidak terputus .. mereka hanya berhenti ketika aplikasi berhenti.sumber
Satu kesalahpahaman yang ingin saya klarifikasi:
sumber
Daemon Thread dan User Threads. Umumnya semua utas yang dibuat oleh pemrogram adalah utas pengguna (kecuali jika Anda menetapkannya sebagai daemon atau utas induk Anda adalah utas daemon). Utas pengguna biasanya dimaksudkan untuk menjalankan kode program kami. JVM tidak berakhir kecuali semua utas pengguna berakhir.
sumber
Java memiliki jenis utas khusus yang disebut daemon utas.
Untuk apa daemon digunakan?
Biasanya digunakan sebagai penyedia layanan untuk utas normal. Biasanya memiliki loop tak terbatas yang menunggu permintaan layanan atau melakukan tugas utas. Mereka tidak dapat melakukan pekerjaan penting. (Karena kita tidak tahu kapan mereka akan memiliki waktu CPU dan mereka dapat menyelesaikannya kapan saja jika tidak ada utas lain yang berjalan.)
Contoh tipikal dari jenis utas ini adalah pengumpul sampah Jawa .
Masih ada lagi ...
setDaemon()
metode sebelum memanggilstart()
metode. Setelah utas berjalan, Anda tidak dapat mengubah status daemonnya.isDaemon()
metode untuk memeriksa apakah utas adalah utas daemon atau utas pengguna.sumber
Utas daemon seperti asisten. Utas Non-Daemon seperti pemain depan. Asisten membantu pemain untuk menyelesaikan pekerjaan. Ketika pekerjaan selesai, tidak ada bantuan yang dibutuhkan oleh pemain untuk melakukan lagi. Karena tidak diperlukan bantuan, asisten meninggalkan tempat itu. Jadi saat pekerjaan utas Non-Daemon selesai, utas Daemon pergi.
sumber
Utas daemon seperti utas normal kecuali bahwa JVM hanya akan dimatikan ketika utas non daemon lainnya tidak ada. Utas daemon biasanya digunakan untuk melakukan layanan untuk aplikasi Anda.
sumber
Daemon thread di Jawa adalah thread yang berjalan di latar dan sebagian besar dibuat oleh JVM untuk melakukan tugas latar belakang seperti pengumpulan sampah dan tugas pemeliharaan rumah lainnya.
Poin yang perlu diperhatikan:
Setiap utas yang dibuat oleh utas utama, yang menjalankan metode utama di Java secara default bukan daemon karena Utas mewarisi sifat daemonnya dari Utas yang membuatnya yaitu induk Thread dan karena utas utama adalah utas non daemon, utas lain yang dibuat darinya akan tetap non-daemon sampai secara eksplisit membuat daemon dengan memanggil setDaemon (true).
Thread.setDaemon (true) membuat daemon Thread tetapi hanya bisa dipanggil sebelum memulai Thread di Java. Ini akan membuang IllegalThreadStateException jika Thread yang sesuai sudah mulai dan berjalan.
Perbedaan antara utas Daemon dan Non Daemon di Jawa:
1) JVM tidak menunggu thread daemon selesai sebelum ada.
2) Daemon Thread diperlakukan berbeda dari User Thread ketika JVM berakhir, akhirnya blok tidak dipanggil, Stack tidak dilepas dan JVM baru saja keluar.
sumber
Di Jawa, Daemon Threads adalah salah satu jenis utas yang tidak mencegah Java Virtual Machine (JVM) keluar. Tujuan utama dari daemon thread adalah untuk menjalankan tugas latar belakang terutama dalam kasus beberapa tugas rutin berkala atau pekerjaan. Dengan keluarnya JVM, utas daemon juga mati.
Dengan menetapkan a
thread.setDaemon(true)
, utas menjadi utas daemon. Namun, Anda hanya dapat mengatur nilai ini sebelum utas dimulai.sumber
Berikut adalah contoh untuk menguji perilaku thread daemon jika jvm keluar karena tidak adanya thread pengguna.
Harap perhatikan baris terakhir kedua pada output di bawah ini, ketika utas utama keluar, daemon utas juga mati dan tidak tercetak akhirnya dieksekusi9 pernyataan dalam akhirnya blok. Ini berarti bahwa setiap sumber daya i / o yang ditutup pada akhirnya blok daemon thread tidak akan ditutup jika JVM keluar karena tidak adanya utas pengguna.
Keluaran
sumber
Utas daemon adalah seperti yang semua orang jelaskan, tidak akan membatasi JVM untuk keluar, jadi pada dasarnya utas bahagia untuk Aplikasi dari sudut pandang keluar.
Ingin menambahkan bahwa daemon thread dapat digunakan ketika mengatakan saya menyediakan API seperti mendorong data ke server pihak ke-3 / atau JMS, saya mungkin perlu menggabungkan data pada level JVM klien dan kemudian mengirim ke JMS di utas terpisah. Saya dapat menjadikan utas ini sebagai utas daemon, jika ini bukan data wajib yang harus didorong ke server. Jenis data ini seperti log push / aggregation.
Salam, Manish
sumber
Utas daemon seperti proses daemon yang bertanggung jawab untuk mengelola sumber daya, utas daemon dibuat oleh Java VM untuk melayani utas pengguna. Contohnya memperbarui sistem untuk unix, unix adalah proses daemon. child of daemon thread selalu daemon thread, jadi secara default daemon adalah false. Anda dapat memeriksa utas sebagai daemon atau pengguna dengan menggunakan metode "isDaemon ()". jadi daemon thread atau proses daemon pada dasarnya bertanggung jawab untuk mengelola sumber daya. misalnya ketika Anda memulai jvm ada pengumpul sampah yang berjalan yaitu daemon thread yang prioritasnya adalah 1 yang terendah, yang mengelola memori. jvm masih hidup selama utas pengguna masih hidup, kamu tidak bisa membunuh daemon thread.jvm bertanggung jawab untuk mematikan utas daemon.
sumber
Mari kita bicara hanya dalam kode dengan contoh-contoh yang berfungsi. Saya suka jawaban russ di atas tetapi untuk menghilangkan keraguan yang saya miliki, saya meningkatkannya sedikit. Saya menjalankannya dua kali, sekali dengan thread pekerja diatur ke deamon true (thread deamon) dan waktu lain setel ke false (user thread). Ini mengkonfirmasi bahwa utas deamon berakhir ketika utas utama berakhir.
sumber
Utas daemon umumnya dikenal sebagai utas "Penyedia Layanan". Utas ini tidak boleh digunakan untuk menjalankan kode program tetapi kode sistem. Utas ini berjalan paralel dengan kode Anda, tetapi JVM dapat membunuhnya kapan saja. Ketika JVM tidak menemukan utas pengguna, ia menghentikannya dan semua utas daemon berakhir secara instan. Kita dapat mengatur utas non-daemon ke daemon menggunakan:
sumber
Utas daemon adalah utas yang berjalan di latar belakang selama utas non-daemon lain dari proses masih berjalan. Jadi, ketika semua utas non-daemon selesai, utas daemon diakhiri. Contoh untuk utas non-daemon adalah utas yang menjalankan Utas. Utas dibuat daemon dengan memanggil
setDaemon()
metode sebelum utas dimulaiUntuk Referensi Lebih Lanjut: Daemon thread in Java
sumber
Bagi saya, daemon utas itu seperti penjaga rumah untuk utas pengguna. Jika semua utas pengguna selesai, utas daemon tidak memiliki pekerjaan dan dimatikan oleh JVM. Saya menjelaskannya di video YouTube .
sumber
JVM akan menyelesaikan pekerjaan ketika eksekusi utas non-daemon terakhir selesai. Secara default, JVM akan membuat utas sebagai nondaemon tetapi kita dapat membuat Utas sebagai daemon dengan bantuan metode
setDaemon(true)
. Sebuah contoh yang baik dari thread Daemon adalah thread GC yang akan menyelesaikan pekerjaannya segera setelah semua thread nondaemon selesai.sumber
Utas daemon mati saat utas pencipta keluar.
Utas non-daemon (default) bahkan dapat hidup lebih lama dari utas utama.
sumber
join
, daemon akan tetap ada selama utas utama berjalan.