基礎篇之多線程總結

來源:互聯網
上載者:User

標籤:繼承   sleep   速度   自己   生產者   sub   shu   實現   已耗用時間   

1.進程與線程:

線程:一個進程可以擁有多個並行的線程,線程是進程中一個程式執行控制的單元,一個進程中的線程會共用記憶體位址空間(因為線程所使用的資源是它所在進程的資源),所以訪問相同的變數和對象,所以進程內線程之間的資料也是共用的,且線程組的通訊是在同一地址空間上進行,所以不需要額外的通訊機制,使得傳遞的訊息速度更快,每個線程在棧裡面是獨立的,單個線程中程式是有序的,一個線程看另一個線程中程式是無序的 ,線程是基於進程的

進程:由cpu,data,code三部分組成,每個進程都是獨立的,由系統分配,進程間的切換開銷較大,進程基於作業系統;

 

2.並行與並發

並發:多個線程訪問同一份資源

並行:在多個cpu情形下,多個線程同時運行

 

3.線程數與已耗用時間

線程數:我們看到的虛擬機器裡面顯示的線程數,是虛擬線程數,例如單線程,他是將時間分成很多小的時間片,不同的時間片會調用不同的虛擬線程程式段,當調用這個程式是其他程式會掛起

已耗用時間:已耗用時間與實際的是線程數有直接聯絡,而且過多的線程容易引起並發等問題,所以不一定快

 

4.開啟線程的形式

Thread類:

步驟:

1>定義類繼承Thread類;

2>目的是複寫run方法,將要讓線程啟動並執行代碼都儲存到run方法中;

3>通過建立Thread類的子類對象,建立線程對象;

4>調用線程的start方法,開啟線程,並執行run方法。

 

Runnable介面

步驟:

1>定義類實現Runnable介面。

2>覆蓋介面中的run方法。

3>通過Thread類建立線程對象;

4>將實現了Runnable介面的子類對象作為實際參數傳遞給Thread類中的建構函式。

5>調用線程的start方法,開啟線程,並執行run方法。

 

Callable介面

步驟:

1>定義類實現callable介面。

2>覆蓋介面中的call方法。

3>建立一個可重用的固定線程池

4>將實現了callable介面的子類對象作為實際參數傳遞給submit類中的建構函式,開啟線程池所有線程

5>shutdown停止線程池的所有線程,也可以不採用shutdown,自訂停止線程

 

Callable 與runnable介面的區別

1>callable定義的是call方法,runnable定義的是run方法

2>callable可拋出異常,run方法不可拋出異常

3>callable有傳回值,runnable沒有傳回值

 

5. 線程在運行過程中的狀態

1>  新生狀態:new一個thread類或者其子類之後,就處於新生狀態

2>  就緒狀態:線程start後,就處於就緒狀態

3>  運行狀態:運行run方法中的代碼,直到調用完成,或者調用其他方法而停止

4>  阻塞狀態:處於啟動並執行線程在遇到某些情況後會停止自己的運行,進入阻塞狀態,下次運行時會回到停止的狀態接著運行(如sleep,jion,io等)

5>  死亡狀態:被強制終止(如stop,destroy等),或者運行完成

 

6. 線程停止的方式

Thread的stop及destroy  Api已經標明已淘汰,所有多用自己定義的線程停止,啟動線程停止後,線程是在一定的延時後最終停止

 

7. 線程中常用的一些方法

1>  isAlive 線程是否還存活

2>  currentThread  返回當前線程地址

3>  setName 設定名稱

4>  getName 擷取該線程名稱 

5>  currentThread. getName擷取當前線程名稱

6>  setpriority  設定優先權,指的是機率而不是運行順序

7>  sleep 線程休眠,不會釋放鎖

8>  wait (Object方法)暫停該線程,會釋放鎖

9>  notify  (Object方法)喚醒該對象下的單個線程

10> notifyAll (Object方法)喚醒所有該對象下的線程

 

8. 同步

添加同步的原因:多個線程訪問同一份資源,為了確保這份資源的安全所以加入了同步,

過多的同步可能會造成死結,因為都不肯釋放資源。

9. 常用解決死結的方法

1>  消費者生產者思想法:加入一個標誌位,使生產時就不能消費,消費時就不能生產

2>  Timer類來實現等

基礎篇之多線程總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.