欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中stringbuffer線程安全分析實(shí)例詳解

 更新時(shí)間:2021年01月18日 16:44:49   作者:小妮淺淺  
在本篇文章里小編給大家整理的是一篇關(guān)于java中stringbuffer線程安全分析實(shí)例詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。

在對于一些類作用于線程時(shí),安全系數(shù)高的線程更推薦大家使用,在盡可能的程度上降低程序出錯的可能性。對于本篇所要提到的StringBuffer而言,在其緩沖區(qū)中有多個線程的存在,我們在查詢其內(nèi)部方法時(shí)發(fā)現(xiàn)了鎖的存在?,F(xiàn)在我們就StringBuffer線程、鎖的應(yīng)用、線程安全分析逐步帶來介紹。

1.StringBuffer線程說明

Java.lang.StringBuffer線程安全的可變字符序列。一個類似于String的字符串緩沖區(qū),但不能修改。雖然在任意時(shí)間點(diǎn)上它都包含某種特定的字符序列,但通過某些方法調(diào)用可以改變該序列的長度和內(nèi)容。

可將字符串緩沖區(qū)安全地用于多個線程。可以在必要時(shí)對這些方法進(jìn)行同步,因此任意特定實(shí)例上的所有操作就好像是以串行順序發(fā)生的,該順序與所涉及的每個線程進(jìn)行的方法調(diào)用順序一致。

2.synchronized鎖的應(yīng)用方式

(1)修飾實(shí)例方法,對當(dāng)前實(shí)例加鎖

public synchronized StringBuffer append(int i) {
  toStringCache = null;
  super.append(i);
  return this;
 }

(2)修飾靜態(tài)方法,對當(dāng)前類對象加鎖

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");
然后進(jìn)入appen里面看看
@Override
 public synchronized StringBuffer append(String str) {
  toStringCache = null;
  super.append(str);
  return this;
 }

看到synchronized,在方法上面,說明是有線程安全的。

關(guān)于stringbuffer基礎(chǔ)知識點(diǎn)擴(kuò)展:

StringBuffer

當(dāng)對字符串進(jìn)行修改的時(shí)候,需要使用 StringBuffer 和 StringBuilder 類。

和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,并且不產(chǎn)生新的未使用對象。

StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在于 StringBuilder 的方法不是線程安全的(不能同步訪問)。

由于 StringBuilder 相較于 StringBuffer 有速度優(yōu)勢,所以多數(shù)情況下建議使用 StringBuilder 類。然而在應(yīng)用程序要求線

程安全的情況下,則必須使用 StringBuffer 類

字符串 的內(nèi)容一旦創(chuàng)建,則不允許改變,如果一旦改變,則會創(chuàng)建一個新的字符串對象。

字符串的內(nèi)容一般不會隨意的修改,因?yàn)槊啃薷囊淮味紩?chuàng)建一個新的字符串對象。

如果需要修改字符串的內(nèi)容:建議使用字符串緩沖區(qū)類。

StringBuffer(字符串緩沖區(qū)類): 存儲字符的集合容器。

筆試題: 使用Stringbuffer無參的構(gòu)造方法默認(rèn)的初始化容量是多少? 當(dāng)容量不夠用時(shí)會自動增長多少?

StringBuffer的底層是維護(hù)了一個字符數(shù)組,存儲字符的時(shí)候?qū)嶋H上是往該字符數(shù)組中存儲 的,

而字符數(shù)組的初始化容量是16, 當(dāng)容量不夠使用時(shí),自動增長1倍。

到此這篇關(guān)于java中stringbuffer線程安全分析實(shí)例詳解的文章就介紹到這了,更多相關(guān)java中stringbuffer線程安全分析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java類加載連接和初始化原理解析

    Java類加載連接和初始化原理解析

    這篇文章主要介紹了Java類加載連接和初始化原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • java實(shí)現(xiàn)任意矩陣Strassen算法

    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)

    這篇文章主要介紹了關(guān)于spring依賴注入的方式以及優(yōu)缺點(diǎn),依賴注入,是IOC的一個方面,是個通常的概念,它有多種解釋,這概念是說你不用創(chuàng)建對象,而只需要描述它如何被創(chuàng)建,需要的朋友可以參考下
    2023-07-07
  • Springboot-Starter造輪子之自動鎖組件lock-starter實(shí)現(xiàn)

    Springboot-Starter造輪子之自動鎖組件lock-starter實(shí)現(xiàn)

    這篇文章主要為大家介紹了Springboot-Starter造輪子之自動鎖組件lock-starter實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法

    Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法

    這篇文章主要介紹了Java中EasyPoi導(dǎo)出復(fù)雜合并單元格的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Springboot中如何自定義監(jiān)聽器

    Springboot中如何自定義監(jiān)聽器

    這篇文章主要介紹了Springboot中自定義監(jiān)聽器,自定義事件需要繼承ApplicationEvent類,并添加一個構(gòu)造函數(shù),用于接收事件源對象,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-07-07
  • 在Spring Boot框架中使用AOP的正確姿勢

    在Spring Boot框架中使用AOP的正確姿勢

    aop是spring的兩大功能模塊之一,功能非常強(qiáng)大,為解耦提供了非常優(yōu)秀的解決方案。下面這篇文章主要給大家介紹了如何在Spring Boot框架中使用AOP的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-08-08
  • Java8新特性-Lambda表達(dá)式詳解

    Java8新特性-Lambda表達(dá)式詳解

    Java 8 (又稱為 jdk 1.8) 是 Java 語言開發(fā)的一個主要版本。Lambda 表達(dá)式,也可稱為閉包,它是推動 Java 8 發(fā)布的最重要新特性。本文通過詳細(xì)的代碼示例介紹了Java8新特性感興趣的朋友可以參考一下
    2023-04-04
  • AsyncHttpClient?ChannelPool線程池頻道池源碼流程解析

    AsyncHttpClient?ChannelPool線程池頻道池源碼流程解析

    這篇文章主要為大家介紹了AsyncHttpClient ChannelPool線程池頻道池源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 記一次Maven項(xiàng)目改造成SpringBoot項(xiàng)目的過程實(shí)踐

    記一次Maven項(xiàng)目改造成SpringBoot項(xiàng)目的過程實(shí)踐

    本文主要介紹了Maven項(xiàng)目改造成SpringBoot項(xiàng)目的過程實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論