はじめに
スレッドには、以下の2種類ある。 1) デーモンスレッド ★今回、扱う事項★ 2) ユーザスレッド ... デフォルトAPI仕様
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html
デーモンスレッドとは?
* プログラム終了のタイミングで、スレッド処理が破棄される
利点
* 終了処理(後処理)を意識しないですむ
使用上の注意
* スレッド内で、後処理が必要な処理(リソース破棄 (データベース接続、一時ファイルなど) を行う場合、使用を控える
作成方法
Thread thread = new Thread(); thread.setDaemon(true); // ★setDaemonにtrueをセット★ thread.start(); ※ setDaemon()は、start()より先に呼ばないとダメらしいhttp://hiratara.hatenadiary.jp/entry/20060725/1153838234
実験
(i) ユーザスレッドの場合
public class Main { public static void main(String[] args) { Thread thread = new Thread(() -> { for (int i = 0; i < 10; i++) { try { Thread.sleep(10L); } catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println(Thread.currentThread().getName()); } }); //thread.setDaemon(true); // ★ユーザスレッド★ thread.start(); System.out.println("Done : " + thread.isAlive()); } }出力結果 (スレッドが実行「Thread-0」されている)
Done : true Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0
(ii) デーモンスレッドの場合
・・・ thread.setDaemon(true); // ★デーモンスレッド(上記のサンプルのコメントを外した)★ ・・・出力結果 (スレッドが実行されない)
Done : true
参考文献
http://www.confrage.com/java/thread/daemon_thread/daemon_thread.htmlhttp://miffysora.wikidot.com/daemon-thread
http://nodamushi.hatenablog.com/entry/20130907/1378554253
http://so-zou.jp/software/tech/programming/java/thread/
http://qiita.com/msakamoto_sf/items/74374cb392d7825cb51c
https://www.ibm.com/developerworks/jp/java/library/j-king/