为什么同步的StringBuffer从来都不是一个好主意

介绍

StringBuffer是用于可变字符串的同步类。 使其同步的主要问题是

  1. 它通常用作局部变量,因此使其同步只会使其变慢。
  2. 以多线程方式使用它从来不是一个好主意。 这个问题是开发人员认为使用StringBuffer的方法在不使用时本身就是线程安全的。

StringBuffer的问题

这是来自真实类的示例,该类用于许多交易系统的生产中。 它不是一种常用的方法,但是您可能会认为StringBuffer为您提供了线程安全,而实际上却没有。
public void addProperty(String name, String value) {if (value != null && value.length() > 0) {if (sb.length() > 0) {sb.append(',');}sb.append(name).append('=').append(value);}}
尽管单个调用是线程安全的,但多个调用却不是。 要找到不涉及多个调用(包括toString)的StringBuffer的好用法,几乎是不可能的

一个难题

想象一下三个线程的调用(不分先后)
T1: addProperty("a", "b");
T2: addProperty("c", "d");
T3: sb.toString();

编写一个程序,该程序将生成T3的sb.toString()的所有可能输出(我发现是89)。出于线程安全的考虑,您可以将其减少到4。

注意

如果使用StringBuilder,情况会更糟,但是至少您可能不会认为方法不是线程安全的。 例如SimpleDateFormat使用StringBuffer

参考: 为什么我们的JCG合作伙伴 Peter Lawrey在Vanilla Java博客上从来没有一个同步StringBuffer的好主意 。

并发 2013-04-26

彼得·劳瑞

翻译自: https://www.javacodegeeks.com/2013/04/why-a-synchronized-stringbuffer-was-never-a-good-idea.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大工20秋计算机组成原理在线作业2,大工14秋《计算机组成原理》在线作业2答案...

大工14秋《计算机组成原理》在线作业2单选题 判断题一、单选题(共 10 道试题,共 50 分。)1. 存储周期是指( )。A. 存储器的读出时间B. 存储器的写入时间C. 存储器进行连续读或写操作所允许的最短时间间隔D. 存储器进行连续读或写操作所允许的最长时间间隔正确答案&a…

css清除浮动

css设计浮动属性的主要目的,是为了实现文本绕排图片的效果。 一.浮动 当浮动一张图片或者其他元素时,浏览器会将浮动元素往上方推,直到它碰到父元素的内边界。后面的元素不再认为浮动元素在文档流中位于它的前面了,因为它就会占…

gitlab搭建配置;ssh配置;

1.centos7上搭建gitlab,过程略; 命令:gitlab-ctl [start] [stop] [restart] [reconfigure] [tail] 查看gtilab日志 [status] 查看gitlab运行状态信息 2.修改默认ip端口: vim /etc/gitlab/gitlab.rb ; external_url h…

5月学习总结(Ant-Design,mustache,require.js,grunt)

一、Ant-Design学习 因为Ant-Design是基于React实现的,之前自己也学过一段时间的React,对React还是相对比较熟悉的,在学习Ant-Design也还不算吃力。 最开始是从源码看起,从最简单的Icon组件看的,然后连续看了几个组件就…

使用NoSQLUnit测试Spring Data Neo4j应用程序

Spring Data Neo4j是Spring Data项目中的项目,它提供了Spring编程模型的扩展,用于编写使用Neo4j作为图形数据库的应用程序。 要使用NoSQLUnit为Spring Data Neo4j应用程序编写测试,除了考虑Spring Data Neo4j在图形节点和关系中使用一种称为t…

家用计算机历史记录,教您如何查看电脑使用记录

很多朋友想查看自己之前使用过的文件或者文档来查询资料,或者是想看电脑是否被人使用过,但是,如何查看电脑使用记录呢?下面系统之家小编教大家查看电脑使用记录小技巧,不用担心找不到电脑使用记录。希望对大家有所帮助…

html5 图片上传 预览

<html><body><fieldset> <legend>测试</legend> <div class"form-group"> <div class"img-preview rl"> <form id"index_form1" name"index_form1" role"form" method"p…

使用selenium前学习HTML(3)— 属性

<!--HTML标签可以拥有属性&#xff0c;属性提供元素的更多的信息&#xff1b;属性总是以名称/值对的形式出现&#xff0c;比如&#xff1a;name"value"。属性总是在 HTML 元素的开始标签中规定。 --><!DOCTYPE html> <html lang"en"> &l…

k3 Bos开发百问百答

K/3 BOS开发百问百答 &#xff08;版本&#xff1a;V1.1&#xff09; K3产品市场部 目录 一、基础资料篇__ 1 【摘要】bos基础资料的显示问题_ 1 【摘要】单据自定义无法看到bos定义的基础资料_ 1 【摘要】在调出基础资料序时簿时&#xff0c;过滤出我需要的基础资料_ 1 【摘要…

计算机架构专业排名,全国大学计算机专业排名(转贴)

4 东北大学 A 081201计算机系统结构 081200计算机科学与技术 08工学5 西安交通大学 A 081201计算机系统结构 081200计算机科学与技术08工学6 复旦大学 A 081201计算机系统结构 081200计算机科学与技术 08工学7 中国科学技术大学 A 081201计算机系统结构 081200计算机科学与技术…

Spring MVC,Ajax和JSON第2部分–服务器端代码

在上一个博客中&#xff0c;我说过我将谈论Spring&#xff0c;Ajax和JSON&#xff0c;但是没有。 原因是我想使用&#xff08;很少&#xff09;可信的购物网站场景来设置场景。 在这种情况下&#xff0c;当用户单击“电子商务”页面链接时&#xff0c;服务器应用程序将加载目录…

Python模块学习之解决selenium的“can't access dead object”错误

问题描述 在python执行过程中&#xff0c;提示selenium.common.exceptions.WebDriverException: Message: TypeError: cant access dead object 原因 原因是代码中用到了frame,获取元素前需要切换到frame才能定位到元素&#xff0c;否则无法定位到元素 解决方法 在查找元素前加…

初中生学计算机网络应用怎么样,初中生读计算机网络技术专业怎么样?小编解答...

初中生读计算机网络技术专业怎么样?可以这样说&#xff0c;计算机网络技术专业在众多专业当中来说&#xff0c;也是一个发展得比较不错的专业&#xff0c;而且现在也有很多高职学校都开设有计算机网络技术专业&#xff0c;那么初中生读计算机网络技术专业怎么样?计算机网络技…

类的无参方法和Doc注释

一:Java Doc注释: 语法: /** *AccpSchool 类 *author JadeBird *version 1.0 2018/5/26 */ Java Doc是前Sun公司提供的一种技术,它能够从程序代码中抽取类,方法,成员等的注释,形成一个和源代码配套的API帮助文档(简答地说,就是介绍该类,类的方法和成员变量的文档). 因此只要在编…

html/css学习笔记(一)

盒子模型1.background 1.1background-colorbackground-image: url("");background-repeatbackground-size: &#xff08;x轴的比例 y轴的比例&#xff09;background-positionbackground-attachment:fixed;(背景图固定不滚动)1.2 复合写法background: color iamge po…

Spring MVC,Ajax和JSON第3部分–客户端代码

如果您一直关注有关Spring&#xff0c;Ajax和JSON的简短博客系列&#xff0c;那么您会回想起我到目前为止已经创建了一个Spring MVC Web应用程序&#xff0c;该应用程序显示一个表单&#xff0c;该表单允许用户选择一堆项目并向服务器提交购买请求。 然后&#xff0c;服务器用一…

[poj] 3090 Visible Lattice Points

原题 欧拉函数 我们发现&#xff0c;对于每一个斜率来说&#xff0c;这条直线上的点&#xff0c;只有gcd(x,y)1时可行&#xff0c;所以求欧拉函数的前缀和。2*f[n]1即为答案。 #include<cstdio> #define N 1010 using namespace std; int x,y,n,f[N],m;int read() {int a…

10个必知的网页设计术语计算机与网络,计算机网络专业毕业论文-网页设计与制作(23页)-原创力文档...

安徽工业经济职业技术学院毕业论文PAGEPAGE 4-安徽工业经济职业技术学院毕业论文(设计)论文题目&#xff1a; 网页设计与制作系 部&#xff1a; 计算机科学技术系专业名称&#xff1a; 计算机网络技术论文作者&#xff1a; 李婷婷指导教师&#xff1a; 宋多琳2014年4月12日摘 要…

笔记36 Spring Web Flow——配置

Spring Web Flow是一个Web框架&#xff0c;它适用于元素按规定流程运行的程序。Spring Web Flow是Spring MVC的扩展&#xff0c;它支持开发基于流程的应用程 序。它将流程的定义与实现流程行为的类和视图分离开来。在介绍Spring Web Flow的时候&#xff0c;我们将暂时放下Spitt…

一些关于Viewport与device-width的东西~(转)

内容转自 http://www.cnblogs.com/koukouyifan/p/4066567.html 非常感谢 口口一凡 为我们提供的这篇文章&#xff0c;受益匪浅&#xff0c;特地转到自己的博客收藏起来。 以下是原文内容。 进行移动web开发已经有一年多的时间了&#xff0c;期间遇到了一些令人很困惑的东西。…