java中stringbuffer線程安全分析實例詳解
在對于一些類作用于線程時,安全系數(shù)高的線程更推薦大家使用,在盡可能的程度上降低程序出錯的可能性。對于本篇所要提到的StringBuffer而言,在其緩沖區(qū)中有多個線程的存在,我們在查詢其內(nèi)部方法時發(fā)現(xiàn)了鎖的存在?,F(xiàn)在我們就StringBuffer線程、鎖的應用、線程安全分析逐步帶來介紹。
1.StringBuffer線程說明
Java.lang.StringBuffer線程安全的可變字符序列。一個類似于String的字符串緩沖區(qū),但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內(nèi)容。
可將字符串緩沖區(qū)安全地用于多個線程??梢栽诒匾獣r對這些方法進行同步,因此任意特定實例上的所有操作就好像是以串行順序發(fā)生的,該順序與所涉及的每個線程進行的方法調用順序一致。
2.synchronized鎖的應用方式
(1)修飾實例方法,對當前實例加鎖
public synchronized StringBuffer append(int i) {
toStringCache = null;
super.append(i);
return this;
}
(2)修飾靜態(tài)方法,對當前類對象加鎖
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 類的對象能夠被多次的修改,并且不產(chǎn)生新的未使用對象。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在于 StringBuilder 的方法不是線程安全的(不能同步訪問)。
由于 StringBuilder 相較于 StringBuffer 有速度優(yōu)勢,所以多數(shù)情況下建議使用 StringBuilder 類。然而在應用程序要求線
程安全的情況下,則必須使用 StringBuffer 類
字符串 的內(nèi)容一旦創(chuàng)建,則不允許改變,如果一旦改變,則會創(chuàng)建一個新的字符串對象。
字符串的內(nèi)容一般不會隨意的修改,因為每修改一次都會創(chuàng)建一個新的字符串對象。
如果需要修改字符串的內(nèi)容:建議使用字符串緩沖區(qū)類。
StringBuffer(字符串緩沖區(qū)類): 存儲字符的集合容器。
筆試題: 使用Stringbuffer無參的構造方法默認的初始化容量是多少? 當容量不夠用時會自動增長多少?
StringBuffer的底層是維護了一個字符數(shù)組,存儲字符的時候實際上是往該字符數(shù)組中存儲 的,
而字符數(shù)組的初始化容量是16, 當容量不夠使用時,自動增長1倍。
到此這篇關于java中stringbuffer線程安全分析實例詳解的文章就介紹到這了,更多相關java中stringbuffer線程安全分析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- java中String StringBuffer和StringBuilder的區(qū)別詳解
- java中String、StringBuffer與StringBuilder的區(qū)別
- JAVA基礎類庫之String類,StringBuffer類和StringBuilder類
- java中StringBuffer的length()和capacity()方法對比
- Java基礎之StringBuffer詳解
- Java利用StringBuffer替換特殊字符的方法實現(xiàn)
- Java常用類庫StringBuffer,Runtime,日期操作類等類庫總結
- java String、StringBuilder和StringBuffer的區(qū)別詳解
- Java 基礎全面講解StringBuffer類的使用
相關文章
Springboot-Starter造輪子之自動鎖組件lock-starter實現(xiàn)
這篇文章主要為大家介紹了Springboot-Starter造輪子之自動鎖組件lock-starter實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
AsyncHttpClient?ChannelPool線程池頻道池源碼流程解析
這篇文章主要為大家介紹了AsyncHttpClient ChannelPool線程池頻道池源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
記一次Maven項目改造成SpringBoot項目的過程實踐
本文主要介紹了Maven項目改造成SpringBoot項目的過程實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03

