1. 程式人生 > >java多執行緒第一篇——多執行緒基礎知識點總結

java多執行緒第一篇——多執行緒基礎知識點總結

  1. 程序與執行緒

一個正在作業系統中執行的 exe 程式理解成一個“程序”,

執行緒可以理解成是在程序中獨立執行的子任務。

一個QQ.exe 執行時是一個程序, 其中:好友視訊執行緒、下載檔案執行緒、傳輸資料執行緒、傳送表 情執行緒等。

 2.main方法是一個執行緒

3.執行緒是一個子任務,CPU 以不確定的方式,或者說是以隨機的時間來呼叫執行緒中的run 方法。

解釋:

Thread.java 類中的start() 方法通知“執行緒規劃器”此執行緒已經準備 就緒,等待呼叫執行緒物件的run() 方法。這個過程其實就是讓系統安排 一個時間來呼叫Thread 中的run() 方法,也就是使執行緒得到執行。

也就是說start()方法之後執行緒處於就緒狀態。JVM會從所有的就緒狀態的執行緒,取出一個執行,所以說是隨機。

4:啟動 執行緒,具有非同步執行的效果。如果呼叫程式碼thread.run() 就不是非同步執行 了,就是簡單的方法呼叫,

而是同步,

5:使用繼承Thread 類的方式來開發多執行緒應用程式在設計上是有侷限性的,因為Java 是 單根繼承,不支援多繼承,所以為了改變這種限制,可以使用實現Runnable 介面的方式來實 現多執行緒技術

6:isAlive() ;判斷執行緒活著沒。

   currentThread() ;獲取當前執行緒,

sleep( a) ;正在執行的執行緒暫停,休眠a 毫秒

getId() ;獲取執行緒的唯一標識

7: 方法裡面的變數是區域性變數,類裡面的變數是成員變數,成員變數,就會有執行緒安全問題,

最簡單的方法就是加鎖。

使用synchronized 修飾run方法,使多個執行緒在執 行run 方法時,以排隊的方式進行處理。

當一個執行緒呼叫run 前, 先判斷run 方法有沒有被上鎖,如果上鎖,說明有其他執行緒正在 呼叫run 方法,必須等其他執行緒對run 方法呼叫結束後才可以執行 run 方法。這樣也就實現了排隊呼叫run 方法的目的,

synchronized 可以在任意物件 及方法上加鎖,而加鎖的這段程式碼稱為“互斥區”或“臨界區”。 當一個執行緒想要執行同步方法裡面的程式碼時,執行緒首先嚐試 去拿這把鎖,如果能夠拿到這把鎖,那麼這個執行緒就可以執行synchronize 裡面的程式碼。如 果不能拿到這把鎖,那麼這個執行緒就會不斷地嘗試拿這把鎖,直到能夠拿到為止,而且是 有多個執行緒同時去爭搶這把鎖。 沒有加鎖的時候,多執行緒是搶的cpu的執行權,加鎖了,還會搶鎖,

8:

執行緒的優先順序使用1-10描述10個等級,預設是5.數值越大,執行概率越高。

使用setPriority()方法設定優先順序。

9:守護執行緒:

 thread.setDaemon(true)必須在thread.start()之前設定

守護執行緒是一種特殊的執行緒,當程序中不存在非守護執行緒了,則守護執行緒自動銷燬。典型的守護執行緒就是垃圾回收執行緒,當程序中沒有非守護執行緒了,則垃圾回收執行緒也就沒有存在的必要了,自動銷燬。守護執行緒就是非守護執行緒的保姆