---
# System prepended metadata

title: Thread etc
tags: [Thread, Java]

---

# Thread etc
###### tags: `Java` `Thread`
**ThreadGroup**
1. TheadGroup 預設為呼叫該執行緒的執行緒的ThreadGroup。
ex : main的ThreadGroup為mainTG，在main建立了一個新的執性緒 A ，則A的ThreadGroup 為 mainTG
2. TheadGroup可在建立執行緒時設定。
3. interrupt一個thread group 會導致該group所有的active thread都被interrupt。
4. destory在父group中將自己移除，若還有active thread 則拋錯。
5. 守護group將一個group設為daemon但不會影響執行緒的daemon屬性，
 當一個group為守護group時，group中沒有任何active thread則自動destory

**Hook**
JVM的程序的退出是由於JVM中沒有active的非daemon執行緒或者收到系統中斷信號。
對JVM程序註冊一個Hook執行緒，則在JVM退出時該執行緒會啟動
透過Rumtime可以為JVM註冊多個Hook執行緒

		Runtime.getRumtime().addShutdwonHook(Thead t);
實例 : 在起動某程式中會建立一個.lock檔案避免重複啟動，在程式中斷時透過Hook刪除該檔案

注意 :
1. 在linux中 kill pid , kill -1 pid JVM程序會收到中斷信號但kill -9  pid 則不會
2. Hook可以執行一些資源釋放的工作
3. 盡量不要執行耗時非常長的工作，否則程序會遲遲不能退出