1. 程式人生 > >Java中Thread類不常用的一些方法

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我們可以獲取到該方法所在的檔名,類名,類中多少行,方法名。