java中stringbuffer線程安全分析實(shí)例詳解
在對(duì)于一些類作用于線程時(shí),安全系數(shù)高的線程更推薦大家使用,在盡可能的程度上降低程序出錯(cuò)的可能性。對(duì)于本篇所要提到的StringBuffer而言,在其緩沖區(qū)中有多個(gè)線程的存在,我們?cè)诓樵兤鋬?nèi)部方法時(shí)發(fā)現(xiàn)了鎖的存在?,F(xiàn)在我們就StringBuffer線程、鎖的應(yīng)用、線程安全分析逐步帶來(lái)介紹。
1.StringBuffer線程說(shuō)明
Java.lang.StringBuffer線程安全的可變字符序列。一個(gè)類似于String的字符串緩沖區(qū),但不能修改。雖然在任意時(shí)間點(diǎn)上它都包含某種特定的字符序列,但通過(guò)某些方法調(diào)用可以改變?cè)撔蛄械拈L(zhǎng)度和內(nèi)容。
可將字符串緩沖區(qū)安全地用于多個(gè)線程。可以在必要時(shí)對(duì)這些方法進(jìn)行同步,因此任意特定實(shí)例上的所有操作就好像是以串行順序發(fā)生的,該順序與所涉及的每個(gè)線程進(jìn)行的方法調(diào)用順序一致。
2.synchronized鎖的應(yīng)用方式
(1)修飾實(shí)例方法,對(duì)當(dāng)前實(shí)例加鎖
public synchronized StringBuffer append(int i) { toStringCache = null; super.append(i); return this; }
(2)修飾靜態(tài)方法,對(duì)當(dāng)前類對(duì)象加鎖
public static synchronized void test(){ i++; }
(3)修飾代碼塊,對(duì)指定對(duì)象加鎖
public boolean contentEquals(CharSequence cs) { // Argument is a StringBuffer, StringBuilder synchronized(cs) { return nonSyncContentEquals((AbstractStringBuilder)cs); } }
3.線程安全分析
StringBuffer buffer= new StringBuffer(); buffer.append("d"); 然后進(jìn)入appen里面看看 @Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }
看到synchronized,在方法上面,說(shuō)明是有線程安全的。
關(guān)于stringbuffer基礎(chǔ)知識(shí)點(diǎn)擴(kuò)展:
StringBuffer
當(dāng)對(duì)字符串進(jìn)行修改的時(shí)候,需要使用 StringBuffer 和 StringBuilder 類。
和 String 類不同的是,StringBuffer 和 StringBuilder 類的對(duì)象能夠被多次的修改,并且不產(chǎn)生新的未使用對(duì)象。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在于 StringBuilder 的方法不是線程安全的(不能同步訪問(wèn))。
由于 StringBuilder 相較于 StringBuffer 有速度優(yōu)勢(shì),所以多數(shù)情況下建議使用 StringBuilder 類。然而在應(yīng)用程序要求線
程安全的情況下,則必須使用 StringBuffer 類
字符串 的內(nèi)容一旦創(chuàng)建,則不允許改變,如果一旦改變,則會(huì)創(chuàng)建一個(gè)新的字符串對(duì)象。
字符串的內(nèi)容一般不會(huì)隨意的修改,因?yàn)槊啃薷囊淮味紩?huì)創(chuàng)建一個(gè)新的字符串對(duì)象。
如果需要修改字符串的內(nèi)容:建議使用字符串緩沖區(qū)類。
StringBuffer(字符串緩沖區(qū)類): 存儲(chǔ)字符的集合容器。
筆試題: 使用Stringbuffer無(wú)參的構(gòu)造方法默認(rèn)的初始化容量是多少? 當(dāng)容量不夠用時(shí)會(huì)自動(dòng)增長(zhǎng)多少?
StringBuffer的底層是維護(hù)了一個(gè)字符數(shù)組,存儲(chǔ)字符的時(shí)候?qū)嶋H上是往該字符數(shù)組中存儲(chǔ) 的,
而字符數(shù)組的初始化容量是16, 當(dāng)容量不夠使用時(shí),自動(dòng)增長(zhǎng)1倍。
到此這篇關(guān)于java中stringbuffer線程安全分析實(shí)例詳解的文章就介紹到這了,更多相關(guān)java中stringbuffer線程安全分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java中String StringBuffer和StringBuilder的區(qū)別詳解
- java中String、StringBuffer與StringBuilder的區(qū)別
- JAVA基礎(chǔ)類庫(kù)之String類,StringBuffer類和StringBuilder類
- java中StringBuffer的length()和capacity()方法對(duì)比
- Java基礎(chǔ)之StringBuffer詳解
- Java利用StringBuffer替換特殊字符的方法實(shí)現(xiàn)
- Java常用類庫(kù)StringBuffer,Runtime,日期操作類等類庫(kù)總結(jié)
- java String、StringBuilder和StringBuffer的區(qū)別詳解
- Java 基礎(chǔ)全面講解StringBuffer類的使用
相關(guān)文章
java實(shí)現(xiàn)任意矩陣Strassen算法
這篇文章主要介紹了java實(shí)現(xiàn)任意矩陣Strassen算法的相關(guān)資料,需要的朋友可以參考下2016-02-02關(guān)于spring依賴注入的方式以及優(yōu)缺點(diǎn)
這篇文章主要介紹了關(guān)于spring依賴注入的方式以及優(yōu)缺點(diǎn),依賴注入,是IOC的一個(gè)方面,是個(gè)通常的概念,它有多種解釋,這概念是說(shuō)你不用創(chuàng)建對(duì)象,而只需要描述它如何被創(chuàng)建,需要的朋友可以參考下2023-07-07Springboot-Starter造輪子之自動(dòng)鎖組件lock-starter實(shí)現(xiàn)
這篇文章主要為大家介紹了Springboot-Starter造輪子之自動(dòng)鎖組件lock-starter實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法
這篇文章主要介紹了Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Springboot中如何自定義監(jiān)聽(tīng)器
這篇文章主要介紹了Springboot中自定義監(jiān)聽(tīng)器,自定義事件需要繼承ApplicationEvent類,并添加一個(gè)構(gòu)造函數(shù),用于接收事件源對(duì)象,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-07-07在Spring Boot框架中使用AOP的正確姿勢(shì)
aop是spring的兩大功能模塊之一,功能非常強(qiáng)大,為解耦提供了非常優(yōu)秀的解決方案。下面這篇文章主要給大家介紹了如何在Spring Boot框架中使用AOP的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-08-08AsyncHttpClient?ChannelPool線程池頻道池源碼流程解析
這篇文章主要為大家介紹了AsyncHttpClient ChannelPool線程池頻道池源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12記一次Maven項(xiàng)目改造成SpringBoot項(xiàng)目的過(guò)程實(shí)踐
本文主要介紹了Maven項(xiàng)目改造成SpringBoot項(xiàng)目的過(guò)程實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03