Java學習|多執行緒學習筆記
阿新 • • 發佈:2018-11-12
什麼是執行緒?
可以理解為程序中獨立執行的字任務。
使用多執行緒:
1.繼承Thread類:從原始碼可以看到,Thread累實現了Runnable介面。
如果多次呼叫start()方法,會出現異常Exception in thread “main” java.lang.IllegalThreadStateException
2.實現Runnable介面
在某些JVM中,i--分為如下三步:
A.取得原有i值
B.計算i-1
C.對i進行賦值
多執行緒同時訪問,會出現非執行緒安全問題
println()方法內部是同步的。
currentThread()方法:可以返回程式碼正在被哪個執行緒呼叫。
isAlive()方法:判斷當前執行緒是否處於活動狀態。
活動狀態:已經啟動尚未終止。
sleep()方法:使當前正在執行的執行緒休眠指定毫秒數。
this.currentThread()方法返回的執行緒。
getId()方法:獲得執行緒的唯一標識。
停止執行緒:
Thread.interrupt()方法:停止執行緒時使用。
不能馬上停止,做停止標記,當前執行緒的方法執行完以後停止。
this.interrupted()方法:
測試當前執行緒是否是已中斷狀態,執行完清除狀態標誌為false
this.isInterrupted()方法:
測試當前執行緒是否是已中斷狀態,不清除狀態標誌
this.stop()方法:
暴力停止執行緒,已廢棄,不推薦使用。
會丟擲異常,但不需要捕獲。
使用return配合interrupt()也可以停止執行緒。
注意:
建議使用拋異常的方法來終止執行緒,因為可以在catch程式碼塊中處理異常。
Thread.yieId()方法:
使當前執行緒放棄cpu資源,重新分配。
放棄時間不確定,有可能剛放棄,馬上又獲得。
執行緒的優先順序:
一般來說,優先順序較高的執行緒得到的資源較多。
setPriority():設定執行緒優先順序。
Java中優先順序分為1~10,10個等級,小於1或者大於10都會丟擲異常。
Jdk中有3個預定義的優先順序,1,5,10
優先順序的繼承性:
A執行緒啟動b執行緒,b執行緒的優先順序和a執行緒是一樣的
守護執行緒:
守護執行緒具有陪伴意義,當java中不存在非守護執行緒,那麼守護執行緒也就銷燬了
垃圾回收執行緒就是一個守護執行緒。
synchronized()同步方法:
非執行緒安全問題存在於例項變數中,區域性變數不存在。
方法內部的變數是執行緒私有的。
當多個執行緒訪問多個物件,jvm會建立多個鎖。