多執行緒筆記——1
在學習多執行緒的時候首先我們要清楚一線問題:
1程序:系統分配資源和排程的獨立單位,執行緒: 程序中獨立執行的子任務
2多執行緒的實現方式 整合Thread類和實現Runnable介面
3執行緒的執行順序與呼叫順序無關的,start()方法會通知“執行緒規劃器”,由它啟動一個執行緒來執行run()方法
4Thread類其實也是實現的Runnable介面 其原始碼中定義為: class Thread implements Runnable
5“互斥區”“臨界資源”指的是加鎖的程式碼塊
6println(i++)存在的執行緒安全問題,println是安全的,但是i++的執行是在println之前的
7currentThread()返回的是當前正在被哪個執行緒呼叫的資訊
8isAlive() 是判斷執行緒是否還活著,即已啟動,尚未終止的執行緒
9sleep()是讓當前執行緒休眠,getId()是獲取執行緒的唯一標示
10 停止執行緒 Thread.stop() 暴力停止,釋放鎖後會產生不良後果,不建議使用。
interrupt,並不是停止,只是打了個停止的標記,但是執行緒還在 執行
判斷執行緒的狀態 this.interrupted執行後標誌清除為false
this.isInterrupted 不清除標誌
使用異常法來終止執行緒.,即對當前執行緒的狀態進行判斷,如果標記為停止就丟擲一個異常,終止執行緒
如果執行緒在sleep狀態下被停止,則會丟擲異常
使用return方法來停止執行緒
11暫停一個執行緒
suspend()暫停 resume喚醒 缺點獨佔資源
12 yield方法的作用是讓執行緒放棄當前的cpu資源,但是可能剛放棄立馬就獲得
13 執行緒的優先順序
分為1~10這10個等級,若果不在這個範圍,就會丟擲IllegalArgumentException()
jdk有三個常亮來定義優先順序
MIN_PRIORITY =1
NORM_PRIORITY=5
MAX_PEIORITY =10
14 守護執行緒
最典型的就是gc