Luồng hiểm trong java (thread daemon) là một luồng cung cấp dịch vụ cho luồng người dùng. Thời gian sống của nó phụ thuộc vào các luồng người dùng. Tức là khi tất cả các luồng người dùng chết, JVM sẽ tự động chấm dứt luồng này.
Có nhiều luồng hiểm java chạy tự động, ví dụ: Gc, finalizer, v.v.
Bạn có thể xem tất cả các chi tiết bằng cách gõ jconsole trong dấu nhắc lệnh. Công cụ jconsole cung cấp thông tin về các lớp nạp, sử dụng bộ nhớ, các luồng đang chạy, v.v.
Nội dung chính
Các điểm cần nhớ về luồng hiểm trong java
- Nó cung cấp dịch vụ cho các luồng người dùng.
- Thời gian sống của nó phụ thuộc vào các luồng người dùng.
- Nó là một luồng có mức ưu tiên thấp.
Tại sao JVM kết thúc luồng hiểm nếu không có luồng người dùng?
Mục đích duy nhất của luồng hiểm là nó cung cấp dịch vụ cho luồng người dùng cho các tác vụ nền background supporting task (background supporting task). Nếu không có luồng người dùng, tại sao JVM vấn tiếp tục chạy luồng này? Đó là lý do tại sao JVM kết thúc luồng hiểm nếu không có thread người dùng nào đang được thực thi.
Các phương thức của luồng hiểm
Lớp java.lang.Thread cung cấp hai phương thức cho luồng hiểm trong java.
No. | Phương thức | Mô tả |
---|---|---|
1) | public void setDaemon(boolean status) | Được sử dụng để đánh dấu luồng hiện tại là luồng hiểm hoặc luồng người dùng. |
2) | public boolean isDaemon() | Được sử dụng để kiểm tra xem luồng hiện tại có phải là luồng hiểm không. |
Ví dụ về luồng hiểm trong java
File: TestDaemonThread1.java
public class TestDaemonThread1 extends Thread { public void run() { if (Thread.currentThread().isDaemon()) { // check luong hiem System.out.println("luong hiem hoat dong"); } else { System.out.println("luong nguoi dung hoat dong"); } } public static void main(String[] args) { TestDaemonThread1 t1 = new TestDaemonThread1(); // tao thread TestDaemonThread1 t2 = new TestDaemonThread1(); TestDaemonThread1 t3 = new TestDaemonThread1(); t1.setDaemon(true);// cat dat t1 la luong hiem t1.start();// start cac thread t2.start(); t3.start(); } }
Output:
luong hiem hoat dong luong nguoi dung hoat dong luong nguoi dung hoat dong
File: TestDaemonThread2.java
class TestDaemonThread2 extends Thread { public void run() { System.out.println("Name: " + Thread.currentThread().getName()); System.out.println("Daemon: " + Thread.currentThread().isDaemon()); } public static void main(String[] args) { TestDaemonThread2 t1 = new TestDaemonThread2(); TestDaemonThread2 t2 = new TestDaemonThread2(); t1.start(); t1.setDaemon(true);// xay ra ngoai le tai day t2.start(); } }
Output:
exception in thread main: java.lang.IllegalThreadStateException