1. 程式人生 > >java多執行緒2:Thread中的例項方法

java多執行緒2:Thread中的例項方法

1.start()

  start()方法的作用講白了 就是 “執行緒規劃器”,此執行緒可以執行,正在等待CPU呼叫執行緒物件得run()方法,產生一個非同步執行的效果。

結論:CPU執行哪個執行緒的程式碼具有不確定性

啟動的順序是 m0 m1 m2 但是輸出的結果是 Thread-2 Thread-0 Thread-1

這個例子說明: 呼叫start()方法的順序不代表執行緒啟動的順序,執行緒啟動的順序具有不確定性

2.run()

執行緒開始執行,虛擬機器呼叫的是執行緒run()方法中的內容。

說明:如果只有run(),沒有start(),Thread例項run()方法裡面的內容是沒有任何非同步效果的

換句話說就是:只有run() 而不呼叫start()啟動執行緒 是沒有任何意義的

3.isAlive()
測試執行緒是否處於活動狀態,只要執行緒啟動沒有終止,方法返回的就是true

 看到在start之前,執行緒的 isAlive是false。start()之後就是true了,

4.getId()

在一個java應用中,有一個Long型的全域性唯一的執行緒ID生成器 ThreadSeqNumber,每new出來一個執行緒都會把這個自增一次,並賦予執行緒tid屬性,這個Tread自己做的,使用者無法執行一個執行緒的id

5.getName()

這個方法也比較簡單。我們new一個執行緒的時候,可以指定該執行緒的名稱,也可以不指定。

如果指定,那麼執行緒的名字就是我們自己指定的,getName()返回的也是開發者指定執行緒的名字。

如果不指定,那麼Thread中的一個int型全域性唯一的執行緒初始號生產器 ThreadInitNum,java 先把threadInitNum自增

然後以 “Thread-threadInitNum”的方式來命名新生的執行緒

 

6.getPriority()和setPriority(int newPriority)

這兩個方法使用者獲取和設定執行緒的優先順序,優先順序高的CPU得到的CPU資源比較多,設定優先順序有助於幫“執行緒規劃器”確定下一次選擇哪一個執行緒優先執行。

換句話說:兩個在等待CPU的執行緒,優先順序高的執行緒越容易被CPU執行

請看例子:

可以看出:執行緒預設的優先順序為5,如果不手動制定,那麼執行緒的優先順序具有繼承性,比如執行緒A啟動執行緒B,那麼執行緒B的優先順序和執行緒A的優先順序相同。

7.isDeaMon setDeaMon(boolean on)

java中有兩種執行緒,一種是使用者執行緒,一種是守護執行緒,守護執行緒是一種特殊的執行緒,他的作用是為其他執行緒的執行提供便利的服務,最典型的例子就是GC執行緒,如果程序中不存在非守護執行緒,那麼守護執行緒自動銷燬,因為沒有存在的必要,為別人服務,結果服務的物件都沒有了,當然要銷燬了,

情況例子: