java併發編程--09(多線程編程的最佳實踐)

1.使用本地變量(局部變量)

    應該儘量的使用本地變量,而不是創建一個類或者實例的形式

2.使用不可變類

   比如String類,它可以降低代碼中同步數量

3.最小化鎖的作用域範圍 安達爾定理

    

    簡單來說就是被鎖起來的代碼越少越好

4.使用線程池Executor,而不是直接使用new Thread()

5.寧可使用同步,也不要使用線程的wait和notify

 java 1.5以後增加了許多的同步工具類,應該優先使用同步工具,而不是去思考使用線程的wait的notify方法

6.使用BlockingQueue實現生產與消費模式

  大部分的併發問題都可以使用生產消費的問題來解決,而BlockingQueue是最好的實現方式,單個生產單個消費,多個生產多個消費都可以處理。

7.使用併發集合,而不是加了鎖的同步集合

8.使用Semaphore創建有界的訪問

   對於數據庫,文件系統,Socket等資源必須要做有界的訪問,可以通過Semaphore來指定同時訪問資源的額線程數

9.寧可使用同步代碼塊,也不使用同步的方法

10.避免使用靜態變量

 如果非要用那就讓他編程final的,如果是集合的話使用只讀集合

11.Spring與多線程安全

 Spring並沒有保證這些Bean的線程安全,Bean默認爲單例的(singleton),該Bean的生命週期與Spring IOC的生命週期是一致.其次prototype,他在每次注入的時候都會創建一個對象。我們交由Spring管理的對象大多都是一些無狀態的對象,比如DTO,VO,Service,Dao,Controller,每個無狀態的對象都是線程安全的,不涉及狀態的改變所以不存在線程安全的問題。如果我們必須創建有狀態的對象的時候,我們就要使用ThreadLocal把變量變成私有的,如果變量需要在多個線程之間共享,那麼就要使用syn,Lock,CAS等這些來實現線程同步的方法

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章