java中stringbuffer執行緒安全分析例項詳解
在對於一些類作用於執行緒時,安全係數高的執行緒更推薦大家使用,在儘可能的程度上降低程式出錯的可能性。對於本篇所要提到的StringBuffer而言,在其緩衝區中有多個執行緒的存在,我們在查詢其內部方法時發現了鎖的存在。現在我們就StringBuffer執行緒、鎖的應用、執行緒安全分析逐步帶來介紹。
1.StringBuffer執行緒說明
Java.lang.StringBuffer執行緒安全的可變字元序列。一個類似於String的字串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字元序列,但通過某些方法呼叫可以改變該序列的長度和內容。
可將字串緩衝區安全地用於多個執行緒。可以在必要時對這些方法進行同步,因此任意特定例項上的所有操作就好像是以序列順序發生的,該順序與所涉及的每個執行緒進行的方法呼叫順序一致。
2.synchronized鎖的應用方式
(1)修飾例項方法,對當前例項加鎖
public synchronized StringBuffer append(int i) { toStringCache = null; super.append(i); return this; }
(2)修飾靜態方法,對當前類物件加鎖
public static synchronized void test(){ i++; }
(3)修飾程式碼塊,對指定物件加鎖
public boolean contentEquals(CharSequence cs) { // Argument is a StringBuffer,StringBuilder synchronized(cs) { return nonSyncContentEquals((AbstractStringBuilder)cs); } }
3.執行緒安全分析
StringBuffer buffer= new StringBuffer(); buffer.append("d"); 然後進入appen裡面看看 @Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }
看到synchronized,在方法上面,說明是有執行緒安全的。
關於stringbuffer基礎知識點擴充套件:
StringBuffer
當對字串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。
和 String 類不同的是,StringBuffer 和 StringBuilder 類的物件能夠被多次的修改,並且不產生新的未使用物件。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是執行緒安全的(不能同步訪問)。
由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程式要求線
程安全的情況下,則必須使用 StringBuffer 類
字串 的內容一旦建立,則不允許改變,如果一旦改變,則會建立一個新的字串物件。
字串的內容一般不會隨意的修改,因為每修改一次都會建立一個新的字串物件。
如果需要修改字串的內容:建議使用字串緩衝區類。
StringBuffer(字串緩衝區類): 儲存字元的集合容器。
筆試題: 使用Stringbuffer無參的構造方法預設的初始化容量是多少? 當容量不夠用時會自動增長多少?
StringBuffer的底層是維護了一個字元陣列,儲存字元的時候實際上是往該字元陣列中儲存 的,
而字元陣列的初始化容量是16, 當容量不夠使用時,自動增長1倍。
到此這篇關於java中stringbuffer執行緒安全分析例項詳解的文章就介紹到這了,更多相關java中stringbuffer執行緒安全分析內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!