Java的編程邏輯--15章 並發

來源:互聯網
上載者:User

標籤:his   重入   共用   art   run   另一個   start   變數   waiting   

1、run()和start()的區別

2、線程的基本屬性和方法

  1. id:一個遞增的整數,每建立一個線程就加一
  2. name
  3. 優先順序:從1到10,預設為5,會映射到系統中的優先順序。數字越大,要優先順序越高
  4. 狀態: 
    • NEW :還沒調用start 
    • RUNABLE:正在執行run或者正在等待cup分配時間
    • BLOCKED:被阻塞
    • WAITING:被阻塞
    • TIMED_WAITING:被阻塞
    • TERMINATED:結束
  1. 是否daemo線程
  2. sleep方法, 單位是毫秒
  3. yield方法,建議讓出cpu
  4. join方法,join(0)或join()標示無限期等待
  5. 過時方法 stop(),suspend(),resume(),已經過時,不應再使用

3、競態條件:當多個線程訪問和操作同一個對象時,最終執行結果與執行時序有關,可能正確也可能不正確。

    解決方案:

  • 使用synchronized關鍵字
  • 使用顯示鎖
  • 使用原子變數

4、記憶體可見度:多個線程可以共用訪問和操作相同的變數,但一個線程對一個共用變數對修改,另一個線程不一定馬上就能看到,甚至永遠也看不到。因為涉及到寄存器和各級緩衝。

  解決方案:

  • 使用volatile關鍵字
  • 使用synchronized關鍵字

5、synchronized

synchronized可用於修飾類的執行個體方法(保護this),靜態方法(保護類對象),代碼塊(任意對象)。

synchronized保護的是對象而非代碼,只要訪問的是同一對象的synchronized方法,即使是不同的代碼,也會被同步順序執行。

所以多個線程是可以同時執行同一個synchronized執行個體方法的,只要他們訪問的對象是不同的即可。

可重新進入性:通過記錄鎖的持有線程和持有數量來實現的。

保證記憶體可見度:在釋放鎖時,所有寫入都會寫回到記憶體,而獲得鎖後,都會從記憶體中讀最新資料。

如果只是保證記憶體可見度,synchronized的成本有點高,

 

Java的編程邏輯--15章 並發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.