1.多線程編程基礎整理--經常使用方法

經常使用方法

start()

啓動線程。此方法調用標示當前線程處於可執行或當即執行狀態(在此狀態下isInterrupted()方法或interrupted()返回true),不能確保當前線程能當即執行,處於準備開始運行狀態或者運行狀態。java

isAlive()方法用來判斷當前線程是否爲存活狀態。存活狀態是指當前線程處在已經啓動但還未終止狀態。線程處在準備開始運行狀態和運行狀態,則表示爲存活狀態。測試

interrupt()

中止線程。給當前線程打中止標識,可是執行此方法並不能保證當前線程什麼時候中止。this

經過Thread.interrupted()threadobj.isInterrupted()判斷終止狀態線程

Thread.interrupted()threadobj.isInterrupted()區別

  • Thread.interrupted()code

    測試當前線程是否已經中斷,並清除中斷狀態(即第一次調用已清除了中斷狀態以後,且第二次調用檢驗完中斷狀態前,且當前線程在此中斷的狀況除外),表現現象即爲在執行第一次interrupted()返回的是true,以後第二次調用返回的爲false。對象

  • threadobj.isInterruted()繼承

    this.isInterrupted()threadObj.isInterrupted() 此方法不會清除中斷狀態。進程

stop()

強制中止線程執。該方法已經被jdk做廢。此方法執行後,當前線程會拋出java.lang.ThreadDeath異常,此爲error類型異常,通常不用捕獲。資源

此方法可能致使清理工做沒法執行以及強制解鎖後出現的數據和執行目標數據不一致的狀況。同步

經常使用如下方式中止線程:

  • return方式

    經過return方法跳出線程執行。

  • 異常法

    經過拋出java.lang.InterruptedException中斷線程。

  • sleep()interrupt()

    先經過休眠線程,再執行中斷方法則目標線程會直接拋出java.lang.InterruptedException: sleep interrupted(無論是先休眠再中斷仍是先中斷再休眠都會拋出此異常信息)。

yield()

釋放cpu資源。釋放cpu資源來讓給其餘線程使用。不過可能會在釋放完cpu資源後又當即獲取cpu資源。

suspend()resume()

暫停/恢復線程執行。該方法已經被JDK做廢。

該方法缺點:

  • 獨佔

    該方法極易形成同步對象的獨佔致使其餘線程都沒法訪問公共同步對象。

  • 不一樣步

    在暫停和恢復的過程當中可能致使目標數據不知足運行邏輯預期

setPriority()

設置線程優先級。現成默認提供1-10個預製優先級,優先級越大則執行時獲取cpu資源的機會越大。

若是小於或大於此預製優先級則會拋出java.lang.IllegalArgumentException異常。

優先級的特性:

  • 繼承

    線程間具備‘繼承’特性。具體表現爲若是線程A的優先級爲6,則由線程A啓動的線程B的優先級也是6。

  • 規則

    在多個不一樣優先級的相同線程對象執行的過程當中,優先級高的老是大部分先執行完成,但不表明優先級高的老是先所有執行完成。即優先級大的線程執行所需的時間和搶奪鎖成功的頻率高於優先級小的線程。 當優先級差距過大時,代碼執行的開始順序和start的順序無關。

  • 隨機

    當優先級差距很近時,執行順序可能隨機出現。如同一個線程對象的2個實例,分別設置優先級爲5和6,則執行過程當中的順序並不明顯按照6優先級先執行的順序出現,具備明顯的隨機性。

setDeamon()

設置線程爲守護線程。JAVA中存在兩種線程,一種是用戶線程,一種是守護線程。當進程中不存在非守護線程時,守護線程會自動終止。典型的守護線程就是垃圾回收線程。

相關文章
相關標籤/搜索