网站首页 > 基础教程 正文
在本篇文章里小编给大家整理的是一篇关于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)修饰代码块,对指定对象加锁
publc 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 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线
程安全的情况下,则必须使用 StringBuffer 类
字符串 的内容一旦创建,则不允许改变,如果一旦改变,则会创建一个新的字符串对象。
字符串的内容一般不会随意的修改,因为每修改一次都会创建一个新的字符串对象。
如果需要修改字符串的内容:建议使用字符串缓冲区类。
StringBuffer(字符串缓冲区类): 存储字符的集合容器。*
笔试题: 使用Stringbuffer无参的构造方法默认的初始化容量是多少? 当容量不够用时会自动增长多少?
StringBuffer的底层是维护了一个字符数组,存储字符的时候实际上是往该字符数组中存储 的,
而字符数组的初始化容量是16, 当容量不够使用时,自动增长1倍。
到此这篇关于java中stringbuffer线程安全分析实例详解的文章就介绍到这了,更多相关java中stringbuffer线程安全分析内容请关注小编或继续浏览下面的相关文章希望大家以后多多支持小编!
猜你喜欢
- 2024-11-08 你居然只知道蓝绿发布?今天教你全链路灰度
- 2024-11-08 redis 分布式锁的 5个坑,真是又大又深
- 2024-11-08 Blazor OIDC 单点登录授权实例7 - Blazor hybird app 端授权
- 2024-11-08 Spring Boot利用filter实现xss防御
- 2024-11-08 Spring连环CVE-2015-5211和CVE-2020-5421漏洞升级教程
- 2024-11-08 如何进行权限系统设计,一文吃透 如何设计一个权限系统
- 2024-11-08 基于Spring Boot的注解驱动式公众号极速开发框架FastBootWeixin
- 2024-11-08 教育平台项目前端:项目前后端接口联调,项目上线部署发布
- 2024-11-08 HTTP通讯框架选型HttpClient/OkHttp
- 2024-11-08 微信公众号自动回复功能开发 微信公众号平台自动回复功能
- 06-18单例模式谁都会,破坏单例模式听说过吗?
- 06-18Objective-c单例模式的正确写法「藏」
- 06-18单例模式介绍(单例模式都有哪些)
- 06-18前端设计-单例模式在实战中的应用技巧
- 06-18PHP之单例模式(php单例模式连接数据库)
- 06-18设计模式:单例模式及C及C++实现示例
- 06-18python的单例模式(单例 python)
- 06-18你认为最简单的单例模式,东西还挺多
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)