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()獲取線程的名稱,不然會出現編譯時異常。

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

sleep():在指定的毫秒內讓當前「正在執行的線程(this.currentThread())」休眠(暫停執行)code

##中止線程對象

**Thread.interrupt():不會終止一個正在運行的現場,還須要加入一個判斷才能夠完成線程的中止 僅僅實在當前線程打了一箇中止的標誌 **繼承

Thread.stop():不安全,棄用的方法 ###中止線程的方法:

  • 退出標誌:return+isInterrupter()+ interrupt()

  • stop()方法

  • interrupt()方法

  • 異常法:catch塊中能夠對異常的信息進行相關的處理並且使用異常流能更好、更方便的控制程序的運行流程,不至於代碼中出現不少個return,形成污染

  • sleep+interrupt(): 若是在sleep狀態下中止某一線程,會進入catch語句,而且清除中止狀態值使之變成false;若是先interrupt()再sleep會拋出sleep interrupted異常

  • 暴力中止stop:stop()方法會拋出ThreadDeath異常(此異常不須要顯示的捕捉) 若是強制讓線程中止則有可能使一些請理性的工具得不到完成,另一種狀況就對因此的對象進行了「解鎖」,致使數據得不到同步的處理,出現數據不一致的問題。

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

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

##暫停線程 suspend():暫停線程

resume():回覆線程

suspend與resume缺點
獨佔:若是使用不當,極易形成公共的同步對象的獨佔,是其餘線程沒法訪問公共同步對象(println)
不一樣步:

###yield 放棄當前的CPU資源,將它讓給其餘的任務去佔用CPU執行時間

###優先級 優先級具備繼承特性 設置線程優先級不能超過所屬線程組的優先級 優先級具備規則性、隨機性:高優先級的線程「老是大部分」先執行完

###守護線程 GC是典型的守護線程

相關文章
相關標籤/搜索