java中stringbuffer线程安全分析实例详解

网友投稿 437 2022-11-06


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 synchronhttp://ized StringBuffer append(String str) {

toStringCache = null;

super.append(str);

return this;

}

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

关于stringbuffer基础知识点扩展:

StringBuffer

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder 类在 Java 5 中被提出,它和 Strhttp://ingBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线

程安全的情况下,则必须使用 StringBuffer 类

字符串 的内容一旦创建,则不允许改变,如果一旦改变,则会创建一个新的字符串对象。

字符串的内容一般不会随意的修改,因为每修改一次都会创建一个新的字符串对象。

如果需要修改字符串的内容:建议使用字符串缓冲区类。

StringBuffer(字符串缓冲区类): 存储字符的集合容器。

笔试题: 使用Stringbuffer无参的构造方法默认的初始化容量是多少? 当容量不够用时会自动增长多少?

StringBuffer的底层是维护了一个字符数组,存储字符的时候实际上是往该字符数组中存储 的,

而字符数组的初始化容量是16, 当容量不够使用时,自动增长1倍。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一般纳税人查询API(一般纳税人查询证明)
下一篇:Java笔试面试每日打卡(2) -基础篇
相关文章

 发表评论

暂时没有评论,来抢沙发吧~