Java中Thread類不常用的一些方法
1.Thread.dumpStack()
該方法打印出當前執行緒棧的一些基本資訊,比如下面的一些資訊
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1344)
at com.example.Test.say(Test.java:16)
at com.example.Test.main(Test.java:27)
該方法其實呼叫的是Exception類的printStackTrace方法。當程式發生異常時,也會列印該資訊,而且中斷執行緒的執行。但是執行緒中dumpStack()方法只是列印棧資訊,不會中斷 執行緒的執行。
2. getContextClassLoader()
該方法返回當前程序的上下文類載入器,上下文類載入器是為了突破Java中類載入器的雙親委派原則的限制。具體知識可以百度一下。
3. interrupt()
在當前執行緒中觸發另一個執行緒a的這個方法時,標記interrupt標記會被設定,如果:
a:當執行緒a因為呼叫了Object類中的wait方法,Thread中的join,或者sleep方法而處在阻塞狀態時,執行緒a中的標記interrupt會被清空,並且執行緒a將丟擲InterruptedException
b:當執行緒阻塞在InterruptibleChannel上,那麼這個channel將會被關閉,並且執行緒a丟擲ClosedByInterruptException異常
c:當執行緒阻塞在NIO中的Selector上,那麼selector會立即返回,不會丟擲任何異常。
4.getStackTrace()
獲取執行緒的棧資訊,這些資訊是存放在StackTraceElement物件陣列中,最早呼叫的方法會在這個陣列的末尾,因此該陣列的結構類似於棧。
執行緒每呼叫一次方法就線上程棧中壓入一個新的棧楨,而StackTraceElement便對應這些楨。
通過StackTraceElement我們可以獲取到該方法所在的檔名,類名,類中多少行,方法名。
的