文章目錄
- 線程的優先級
- 線程的阻塞和等待
- 線程守護
- 線程的生命周期
- 線程的中斷
線程的優先級
- Java 采用的是搶占式的 cpu 排程方式(有些系統采用的是平均式的 cpu 排程系統)
- 是以需要對線程設定優先級來搶占 cpu 的時間片
java學習之:多線程程式設計(2)線程的優先級;線程的阻塞和等待;線程守護;線程的中斷線程的優先級線程的阻塞和等待線程守護線程的生命周期線程的中斷 - java 線程的優先級隻有三種常量,不能随意更改,隻能在
範圍内。1-10
-
更改線程優先級t.setPriority();
-
擷取線程優先級t.getPriority()
- 線程的優先級高,隻能代表他獲得 cpu 時間片的幾率比較大,并不能保證他最先執行
線程的阻塞和等待
- 阻塞或等待的線程幾乎不消耗資源
- 當一個線程企圖獲得一個資源對象的鎖;而這個資源正被其他線程占有,目前線程就會阻塞
- 通過下面方法的調用可以讓線程進入(計時等待狀态):
-
: 使正在進行的線程停留指定的毫秒數static void sleep(long millis)
-
:等待終止指定的線程。void join()
- 也就是:讓主線程等待子線程的終止。
java學習之:多線程程式設計(2)線程的優先級;線程的阻塞和等待;線程守護;線程的中斷線程的優先級線程的阻塞和等待線程守護線程的生命周期線程的中斷 - 主線程的代碼塊中,如果碰到了
方法,此時主線程需要等待(阻塞),等待子線程結束了(Waits for this thread to die.),才能繼續執行t.join()
之後的代碼塊。t.join()
-
方法一共有三個重載,都被join()
修飾,無法被子類重寫。final
-
代表主線程會一直等,直到子線程結束join() = join(0)
-
方法中調用了join()
方法wait()
-
和join()
一樣,可以被中斷(被中斷時,會抛出sleep()
異常);不同的是,InterrupptedException
内部調用了join()
,會出讓鎖,而wait()
會一直保持鎖。sleep()
- 也就是:讓主線程等待子線程的終止。
-
:等待join(long mills)
個毫秒,這是mills
方法的重載join()
-
:擷取目前線程的狀态Thread.State.getState()
-
線程守護
- 當主線程結束的時候,守護主線程的線程都會結束。
-
擷取目前的主線程Thread.currentThread()
java學習之:多線程程式設計(2)線程的優先級;線程的阻塞和等待;線程守護;線程的中斷線程的優先級線程的阻塞和等待線程守護線程的生命周期線程的中斷 -
: 将該線程标記為守護線程,當運作的線程都是守護線程的時候,java 虛拟機退出。void setDaemon(boolean on)
線程的生命周期
線程的中斷
- 線程如果在等待或者被阻塞,可以通過在 “被阻塞的線程上” 調用
方法,這時候,這個阻塞将會被一個interrupt()
異常中斷。interruptedException
- 線程被中斷并不代表這個線程應該被終止,因為線程可以有進行中斷的行為
- 内中斷就是異常(interruptedException)
- 外中斷通常指裝置終端:比如磁盤中斷,列印機中斷