溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在java中保證stringbuffer線程安全

發(fā)布時間:2021-01-19 15:34:48 來源:億速云 閱讀:772 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)如何在java中保證stringbuffer線程安全,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1.StringBuffer線程說明

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

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

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

(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,在方法上面,說明是有線程安全的。

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

StringBuffer

當對字符串進行修改的時候,需要使用 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)容一般不會隨意的修改,因為每修改一次都會創(chuàng)建一個新的字符串對象。

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

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

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

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

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

以上就是如何在java中保證stringbuffer線程安全,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI