Java如何寫出高效的併發程序

在Java語言裏,面向對象思想可以讓併發編程變得更簡單。java

能夠從風中共享變量,識別共享變量間的約束條件和執行併發訪問策略這三個方面下手。編程

封裝共享變量

將共享變量做爲對象屬性封裝在內部,對全部公共方法指定併發訪問策略。安全

對於不用發生變化的共享變量(如銀行卡號,身份證號),建議使用final關鍵字修飾。併發

public class Counter {		
    private	long	value;		
    synchronized long get(){				
        return	value;		
    }		
    synchronized long addOne(){				
        return	++value;		
    } 
}

識別共享變量間的約束條件

/**
 * AtomicLong 是線程安全的
 */
public class SafeWM	{		
    //	庫存上限		
    private final AtomicLong upper = new	AtomicLong(0);		
    //	庫存下限		
    private	final AtomicLong lower = new	AtomicLong(0);		
    //	設置庫存上限		
    void setUpper(long	v){	
        //檢查參數合法性
        if(v < lower.get()){
           	throw new IllegalArgumentException(); 
        }
        upper.set(v);		
    }		
    //	設置庫存下限		
    void setLower(long	v){	
        //檢查參數合法性
        if(v > upper.get()){
          	throw new IllegalArgumentException();   
        }
        lower.set(v);		
    }		
    //	省略其餘業務代碼 
}

制定併發訪問策略

  1. 避免共享: 利用線程本地存儲以及每一個認爲u分配獨立的線程。
  2. 不變模式:在java領域應用的不多。
  3. 管程及其餘同步工具:Java領域萬能的解決方案是管程,可是對於不少特定場景,使用Java併發包提供的 讀寫鎖、併發容器等同步工具會更好。

寫出健壯的併發程序的原則

  1. 有限使用成熟的工具類:java SDK併發包裏提供了豐富的工具類,能知足平常需求。
  2. 無可奈何時才使用低級的同步原語:低級同步原語指的是synchronized,Lock,Semaphore等。
  3. 避免過早優化: 安全第一,併發成語首先要保證安全,出現性能瓶頸後再優化。

**** 碼字不易若是對你有幫助請給個關注****工具

**** 愛技術愛生活 QQ羣: 894109590****性能

相關文章
相關標籤/搜索