StringBuilder是不是线程安全的?】的更多相关文章

测试条件: 开启2个并行执行任务,往同一个StringBuilder对象写入值 测试代码: ; static StringBuilder sbIsThreadSafe = new StringBuilder(); static void Main(string[] args) { //迭代次数 ; CodeTimer.Initialize(); CodeTimer.Time("StringBuilder是否是线程安全的呢?", iterationNum, new Action(SBIs…
面试中经常问到的一个问题:StringBuilder和StringBuffer的区别是什么? 我们非常自信的说出:StringBuilder是线程安全的,StirngBuffer是线程不安全的 面试官:StringBuilder不安全的点在哪儿? 这时候估计就哑巴了... 分析 StringBuffer和StringBuilder的实现内部是和String内部一样的,都是通过 char[]数组的方式:不同的是String的char[]数组是通过final关键字修饰的是不可变的,而StringBu…
StringBuffer和StringBuilder的区别在哪里? StringBuffer是线程安全的,StringBuilder是线程不安全的. 那么StringBuilder不安全在哪里?在想这个问题前,我们要知道StringBuffer和StringBuilder的内部实现和String类是一样的,都是通过一个char数组存储字符串,不同的是String类的char数组是final修饰的,是不可变的:但是StringBuffer和StringBuilder的char数组是可变的. 例子:…
StringBuffer属于线程安全,相对为重量级 StringBuilder属于非线程安全,相对为轻量级 线程安全的概念: 网络编程中许多线程可能会同时运行一段代码.当每次运行结果和单独线程运行的结果是一样的,叫做线程安全. 为了达到线程安全的目的在一定程度上会降低程序的性能.所以在单线程中,StringBuilder的性能要比StringBuffer高.多线程为了线程安全需要采用StingBuffer.其实在线程不考虑的情况下,要是程序对性能的要求不高,太在意这两者的区别就没有什么意义(个人…
文章转载自:https://juejin.im/post/5d6228046fb9a06add4e37fe 作者:千山qianshan 1.引言 周五去面试又被面试的一个问题问哑巴了 面试官:StringBuilder和StringBuffer的区别在哪?我:StringBuilder不是线程安全的,StringBuffer是线程安全的 面试官:那StringBuilder不安全的点在哪儿?我:...(哑巴了) 在这之前我只记住了StringBuilder不是线程安全的,StringBuffer…
数据结构(逻辑结构,物理结构,特点) 一.数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关.逻辑结构包括: 集合 数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系: 2.线性结构 数据结构中的元素存在一对一的相互关系: 3.树形结构 数据结构中的元素存在一对多的相互关系: 4.图形结构 数据结构中的元素存在多对多的相互关系. 二.数据的物理结构:指数据的逻辑结构在计算机存储空间的存放形式. …
一.字符串连接的效率问题 使用String连接字符串时为什么慢? 小知识点 java中对数组进行初始化后,该数组所占的内存空间.数组长度都是不可变的. 创建一个字符串,为字符串对象分配内存空间,会耗费掉一定的时间(CPU)与空间(内存)代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能. 过多无用的中间对象 每次连接字符串时都会创建一个新的String对象,随着拼接次数的增多,这个对象会越来越大. 如,进行100次拼接需要创建100个String对象才能够达到目的. St…
联系:两者都适用于字符串的操作,都可以随便对字符串的内容进行变更操作,都继承至AbstractStringBuilder. 区别:StringBuffer是线程安全的,方法都加了synchronized修饰,而StringBuilder则没有,所以StringBuilder是线程不安全的. 关于初始化: 两者初始化大小都一样,在构造时都是通过父类AbstractStringBuilder的构造函数初始一个长度为16的字符集数组,而后每次append时都会判断这个数组长度是否足够,否则通过 这个算…
原文:http://blog.csdn.net/xiao__gui/article/details/8934832 ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题.面对这样的问题,回答是:ArrayList是非线程安全的,Vector是线程安全的:HashMap是非线程安全的,HashTable是线程安全的:StringBuilder是非线程安全的,St…
今天闲来无事,整理了下平时记录在印象笔记里的java开发知识点,整理到String,StringBuffer以及StringBuilder的区别时突然又产生了新的疑惑,这些区别是怎么产生的?温故为何能知新,越是懂得多,越是能发现问题. [场景1] String对象的创建 String类对象有两种创建方式: 1. String s1=new String("Hello world"); new 是java类实例化对象的通用方法,这不足为奇,但是它使用了"Hello world&…
在日常开发过程中String字符串估计是被用到最多的变量了,最近看了一些String.StringBuffer和StringBuilder的东西,三者都可以对字符串进行操作,他们究竟有什么区别,以及适用场景如何,就去查了一些资料. 1)String:字符串常量 2)StringBuffer:字符串变量 3)StringBuilder:字符串变量 一.字符串常量 String 我们进入到String类中发现在String类前面有Final修饰词,就知道String是不可改变的.也许有人会有一些疑惑…
[可变与不可变] String是字符串常量,不可变. StringBuffer和StringBuilder是字符串变量,可变. [执行速度方面] StringBuilder > StringBuffer > String (StringBuilder是线程不安全的,StringBuffer是线程安全的) 为什么执行速度StringBuffer一般大于String? 因为String是不可变的对象,如果使用String进行字符串操作,如字符串拼接,会生成很多的中间String对象,这些对象如果不…
public class TestThread implements Runnable{ private List list; CountDownLatch cdl; public TestThread(List list,CountDownLatch cdl){ this.list=list; this.cdl=cdl; } /** * @see java.lang.Runnable#run() */ @Override public void run() { ;i<;i++){ list.a…
序,StringBuffer是线程安全的,StringBuilder是线程不安全的,但是StringBuilder操作速度快,因此在使用时要根据场景合理选择. StringBuffer和StringBuilder都是可变字符串,当对字符串的操作更多是在添加.删除或更换子串的操作,则用StringBuffer或StringBuilder. String是一个类,实现了 Serializable, Comparable<String>, CharSequence. 一.String类 1 创建St…
长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuffer.StringBuilder.String,他们之间到底有什么联系呢? 1.从类的定义看CharSequence.StringBuffer.StringBuilder.String的关系 下面先贴上这四者的定义(来自JDK1.6) CharSequence是一个定义字符串操作的接口,Strin…
序言 StringBuffer与StringBuilder是java.lang包下被大家熟知的两个类.其异同为:一.长度都是可扩充的:二.StringBuffer是线程安全的,StringBuilder是线程不安全的.那么他们的长度是如何实现动态扩充以及StringBuffer的线程安全是如何实现的呢?通过“深度”阅读它们的源代码,最终弄明白其中的缘由. 正文 首先上一张StringBuffer和StringBuilder类结构图: 抽象类AbstractStringBuilder(也是核心实现…
本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01.html 更多内容请参考: 1. StringBuilder 详解 (String系列之2) 2. StringBuffer 详解 (String系列之3) String 简介 String 是java中的字符串,它继承于CharSequence.String类所包含的API接口非常多.为了便于今后…
StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在大多数实现中,它比要快. StringBuilder源码分析(JDK1.6): 位置:java.lang包中 声明:public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializab…
0. String对象的创建       1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world"); 问题是参数"Hello world"是什么东西,也是字符串对象吗?莫非用字符串对象创建一个字符串对象? 2.当然,String类对象还有一种大家都很喜欢的创建方式:String s="Hello world"; 但是有点怪呀,怎么与基本数据类型的赋值操作(i…
主函数类MainDemo.java package com.itcast.test20140109; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet…
String可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了存储数值不可改变的字符串. StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder.如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用或者变量的内容不断变化,那么最好用StringBuffer.…
[重走Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder   1.String String是Java中的一个final类,主要用于字符串的处理. 1.1 不可变性 String内的字符串是不可变的,每一次修改都会重新生成一个新的String对象实例. 例: // 在堆中会创建一个"Hello"字符串实例,把地址赋给对象a String a = new String("Hello");…
StringBuffer特点: 1.是字符缓冲区,一个容器(不论缓冲区内容怎么变化,StringBuffer这个容器对象都不会改变) 2.是可变长度的 3.可以直接操作多个数据类型 4.最终会通过toString()方法变成字符串   @存储:StringBuffer append():将指定的数据作为参数添加到已有的数据结尾处.       StringBuffer insert(index,数据):可以将数据插入到指定的index位置处.   @删除:StringBuffer delete(…
字符串常用的操作就是拼接,特别是SQL语句的拼接. 做了个简单的试验,它们之间的差别惊人! StringBuffer: public void testStringBuffer() { long start = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < COUNT; i++) { sb.append(STR_INIT); } long end = System.cur…
/*         * StringBuilder与StringBuffer异同点:         *          * 使用方法与StringBuffer完全一样         * StringBuilderjdk1.5以后出现的功能和StringBuffer一模一样的对象.         *          * StringBuilder与StringBuffer但是最大的区别在于:         *             StringBuffer是线程同步的.通常用于多线…
CharSequence接口有三个实现类与字符串有关:String,StringBuffer,StringBuffer.虽然它们都与字符串有关,但是其处理机制是不同的. String类是不可改变的量,也就是创建之后就不能再修改了,比如创建了一个"abc"这样的字符串对象,那么它在内存中永远都会是"abc",这样具有固定表面值的一个对象,不能被修改,即使想通过String提供的方法来尝试修改,也是要么创建一个新的字符串对象,要么返回自己,比如: String str…
StringBuffer:就是字符串缓冲区.         * 用于存储数据的容器.         * 特点:         * 1,长度的可变的.          * 2,可以存储不同类型数据.         * 3,最终要转成字符串进行使用.         * 4,可以对字符串进行修改.         *          *          * 既然是一个容器对象.应该具备什么功能呢?         * 1,添加:         *         StringBuff…
1.首先说一下他们的名称区别: String——字符串常量,StringBuffer——字符串变量(线程安全),StringBuilder——字符串变量(非线程安全) 从名称就可以很明显的看出他们的基本的区别,主要区别就是String是不可变的,每一次对String类型进行改变时都会生成一个信息String对象,将原引用指向它,所以经常改变字符串的内容时最好不用String,太多无引用对象产生后Java虚拟机的GC会开始工作,降低效率. 而StringBuffer和StringBuilder是可…
在创建字符串的时候总是习惯性的使用String str = "...";,str = str+"abcd";也有听说过StringBuffer,StringBuilder,但是压根就没想过要去了解过. String乍一看创建的很方便,其实在字符串比较多的时候或者说创建了多个字符串的时候就会出现很大的问题,因为String在新创建字符串的时候是在内存里面新开辟了一块内存去存储这个字符串,因为String是静态的,之所以我们看起来是动态的,那是因为JVM把我们欺骗了,在…
一.建议  CharSequence接口有三个实现类与字符串相关:String.StringBuffer.StringBuilder,虽然它们都与字符串相关,但是其处理机制不同. 根据不同的场景,建议使用不同的字符序列: 1.使用String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明.少量的变量运算. 2.使用StringBuffer类的场景:在频繁进行字符串运算(如拼接.替换.删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解…