java中的守護執行緒
阿新 • • 發佈:2018-12-08
執行緒分類
守護執行緒(即daemon thread),是個服務執行緒,準確地來說就是服務其他的執行緒,這是它的作用——而其他的執行緒只有一種,那就是使用者執行緒。所以java裡執行緒分2種:
- 使用者執行緒:比如垃圾回收執行緒,就是最典型的守護執行緒
- 守護執行緒:就是應用程式裡的自定義執行緒
使用者執行緒舉例
public class UserTest { public static void main(String[] args) { Thread daemonThread = new Thread(new Runnable() { @Overridepublic void run() { while (true) { System.out.println("hi daemon...."); } } }); daemonThread.start(); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main thread is over!"); } }
守護執行緒舉例
public class DaemonTest { public static void main(String[] args) { Thread daemonThread = new Thread(new Runnable() { @Override public void run() { while(true) { System.out.println("hi Daemon...."); } } }); daemonThread.setDaemon(true); daemonThread.start(); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main thread is over!"); } }
結果對比
使用者執行緒中會一直執行下去,守護執行緒執行一會就結束了。
定義
1、守護執行緒,專門用於服務其他的執行緒,如果其他的執行緒(即使用者自定義執行緒)都執行完畢,連main執行緒也執行完畢,那麼jvm就會退出(即停止執行)——此時,連jvm都停止運行了,守護執行緒當然也就停止執行了。
2、再換一種說法,如果有使用者自定義執行緒存在的話,jvm就不會退出——此時,守護執行緒也不能退出,也就是它還要執行,幹嘛呢,就是為了執行垃圾回收的任務啊。
守護程序和使用者程序同時執行任務的例子
#
public class MyCommon extends Thread { public void run() { for (int i = 0; i < 5; ++i) { System.out.println("執行緒1第 " + i + " 次執行"); try { Thread.sleep(7); }catch (InterruptedException e) { e.printStackTrace(); } } } }
#
public class MyDaemon extends Thread { public void run() { for (int i = 0; i < 5000; ++i) { System.out.println("後臺執行緒1第 " + i + " 次執行"); try { Thread.sleep(7); }catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Thread thread1 = new MyCommon(); Thread thread2 = new MyDaemon(); thread2.setDaemon(true); thread1.start(); thread2.start(); } }
執行結果
後臺執行緒1第 0 次執行 執行緒1第 0 次執行 後臺執行緒1第 1 次執行 執行緒1第 1 次執行 後臺執行緒1第 2 次執行 執行緒1第 2 次執行 後臺執行緒1第 3 次執行 執行緒1第 3 次執行 後臺執行緒1第 4 次執行 執行緒1第 4 次執行 後臺執行緒1第 5 次執行