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線程安全分析內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: