Java多線程編程核心技術(高洪巖)——閱讀筆記

第一章 Java多線程技能

    實現多線程的方式:

  •         繼承Thread類
  •         實現Runnable接口

執行start()方法的順序不表明線程啓動的順序安全

構造函數Thread(Runnable target)不光能夠傳入Runnable接口的對象,還能夠傳入一個Thread類的對象多線程

,這樣作徹底能夠將一個Threa對象中的run()方法交由其餘線程進行調用函數

 

在某些JVM中,i--的操做要分紅以下3步:工具

  • 取得原有i值
  • 計算i-1
  • 對i進行賦值 

currentThread():返回代碼段正在被那個線程調用的信息 測試

    currentThread()和 this的差別this

Thread.currentThread().getName()在兩種實現線程的方式中均可以用

this.getName()只能在繼承方式中使用。由於在Thread子類中用this,this表明的是線程對象。

若是你在Runnable實現類中用this.getName(),那麼編譯錯誤,由於在Runnable中,不存在getName方法

           使用Thread.currentThread().getName()和使用this.getName(),均可以獲得線程的名稱,可是使用this調用getName()方法只能在本類中,而不能在其餘類中,更不能在Runnable接口中,因此只能使用Thread.currentThread().getName()獲取線程的名稱,不然會出現編譯時異常。spa

 

isAlive():判斷當前線程是否處於活動狀態(線程已經啓動且還沒有終止:正在運行或準備運行狀態)線程

sellp():在指定的好秒內讓當前「正在執行的線程(this.currentThread())」休眠(暫停執行)對象

中止線程

    Thread.interrupt():不會終止一個正在運行的現場,還須要加入一個判斷才能夠完成線程的中止繼承

                                僅僅實在當前線程打了一箇中止的標誌

    Thread.stop():不安全,棄用的方法

    中止線程的方法:

  •     退出標誌:return
  •     stop()方法
  •     interrupt()方法
  •     異常法
  •     sleep+interrupt():若是在sleep狀態下中止某一線程,會進入catch語句,而且清除中止狀態值使之變成false;若是先interrupt()再sleep會拋出sleep interrupted異常
  •     暴力中止stop:stop()方法會拋出ThreadDeath異常(此異常不須要顯示的捕捉),若是強制讓線程中止則有可能使一些請理性的工具得不到完成,另一種狀況就對因此的對象進行了「解鎖」,致使數據得不到同步的處理,出現數據不一致的問題。

            this.interrupted()靜態方法:測試當前線程(運行此方法線程,就是此段代碼運行的線程,不是指調用對象的線程)是否已經中斷,線程中斷狀態由該方法清除(置爲false)

            this.isInterrupter():測試線程Thread對象是否已經中斷

相關文章
相關標籤/搜索