Daemon線程和用戶線程
在構造函數TryThread中帶參數true調用sekDaeman()使線程構造一個daemon線程一個daemon線程是一個簡單的背景線程隸屬於創建它的線程因此當創建daemon線程的線程結束deameti線程也與它一起結束在我們這種情況中main()方法創建daemon線程所以當main()返回時所有由main()創建的線程將結束如果你運行這個例子隨便回車幾次你會看到main()方法返回後daemon線程結束因為有時在main()中最後一個輸出後你將從一個或另一個線程中取得輸出
不是daemon線程的線程稱作一個用戶線程(user thread)下圖顯示兩個daemon線程和一個由程序的主線程創建的用戶線程
一個用戶線程有它自己的生命周期不依賴創建它的線程當創建它的線程結束後
終止一個線程
在最後一個例子中如果我們沒將線程創建成daemon線程它們將獨立於main()繼續執行如果你准備自己終止這個程序(在運行Java的DOS會話巾用Ctrl+C你可以通過將構造函數中setDaemon()方法的調用作為注釋驗證這一點鍵入回車會結束main()但其他線程將繼續獨立運行
一個線程可以通過對Thread對象調用interrupt()方法通知另一個線程它應該停止執行實際上不需要停止這個線程它只是在這個線程中設置一個在run()方法中檢查所需的標志達到某種效果此時sleep()方法檢查線程是否被中斷如果是被中斷會拋出一個InterruptedException異常通過對前邊例子做一點修改你可以看到它的運轉
[] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27757.html