`
bjlf1105
  • 浏览: 25485 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程安全的StringBuffer和线程不安全的StringBuilder

阅读更多
有一个线程:
public class MyThread extends Thread {
private StringBuffer sb;
public MyThread(String name,StringBuffer sb) {
super(name);
this.sb = sb;
}
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
sb.append("abc");
}
}
}
测试类:
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
MyThread mt = new MyThread("我的线程",sb);
mt.start();

for (int i = 0; i < 10000; i++) {
sb.append("abcd");
}
while(mt.isAlive()){
}
System.out.println(sb.length());
}
因为StringBuffer是线程安全的,因此每次甚至无论你打印sb的长度多少次,他的值始终是一样的,也就好似有70000个字符长度,但是你把StringBuffer改成StringBuilder,那么每次的打印结果就不一定,甚至可能抛出越界的异常。
再比如把他改为HashTable和HashMap,同样的测试方法,发现Hashtable是线程安全的,而HashMap是线程不安全的,因此hashmap每次打印的结果应该不太一样。
这扯远点,如何编写线程安全的代码呢?Servlet是单实力多线程的,因此他必须是同步且安全的,这样就要注意他的成员变量了,而Struts2则是根据每次请求而创建Action,不存在所谓的安全问题,从而得到很好的扩展
分享到:
评论

相关推荐

    String StringBuffer和StringBuilder区别之源码解析

    StringBuffer类是线程安全的,而StringBuilder类不是线程安全的。 在选择字符串类时,我们需要考虑到线程安全性和执行效率。如果需要线程安全性,可以选择StringBuffer类;如果需要高执行效率,可以选择...

    String,StringBuffer,StringBuilder区别

    在不需要考虑线程安全的环境下,使用StringBuilder可以获得更好的性能,因为避免了同步的开销。 在选择String、StringBuffer和StringBuilder时,需要根据实际的应用场景来决定。如果是在多线程环境下进行字符串操作...

    String、StringBuilder和StringBuffer的区别

    在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...

    String及StringBuffer和StringBuilder的区别

    String、StringBuffer 和 StringBuilder 是 Java 语言中三种不同类型的字符串处理方式,它们之间存在着明显的性能和线程安全性差异。 String String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一...

    从源码角度简单看StringBuilder和StringBuffer的异同(全面解析)

    StringBuilder和StringBuffer的异同解析 StringBuilder和StringBuffer是Java中两个常用的字符串...了解StringBuilder和StringBuffer的异同可以帮助开发者更好地选择合适的字符串处理类,提高应用程序的效率和安全性。

    String、StringBuffer、StringBuilder的使用方法

    `StringBuilder`是`StringBuffer`的非线程安全版本,它在单线程环境下性能更优。其功能与`StringBuffer`相同,但在多线程环境下的安全性不足。例如: ```java StringBuilder sb = new StringBuilder("Hello"); sb....

    String ,StringBuffer与StringBuilder

    String, StringBuffer 与 StringBuilder 的区别 ...String 是不可变类,StringBuffer 是可变类,而 StringBuilder 是线程不安全的可变类。根据不同的使用场景,我们可以选择合适的类来实现字符操作。

    String-StringBuffer-StringBuilder

    在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`都是用来处理字符串的类,但它们之间存在显著的差异,主要体现在性能、线程安全性和使用场景上。 首先,`String`是最基本的字符串类,它代表的是不可...

    StringBuffer 和 StringBuilder 类

    总结来说,StringBuffer和StringBuilder在处理可变字符串时提供了便利,但它们之间存在关键差异:StringBuffer适合多线程环境,因为它提供了线程安全的操作;而StringBuilder则适用于单线程环境,它的操作速度较快。...

    StringBuilder为什么线程不安全?

    面试官:那StringBuilder不安全的点在哪儿? 我:。。。(哑巴了) 在这之前我只记住了StringBuilder不是线程安全的,StringBuffer是线程安全的这个结论,至于StringBuilder为什么不安全从来没有去想过。 分析 在...

    应用线程并通过BuilderString产生字符

    - **线程安全问题**:因为StringBuilder不是线程安全的,所以在多线程环境下直接使用可能会导致数据不一致或错误。如果多个线程需要操作同一个StringBuilder,应考虑使用线程安全的StringBuffer或使用锁来保护对...

    String、StringBuilder、StringBuffer的区别

    这是因为 StringBuilder 不提供同步机制,使得在多线程下操作时可能会出现问题,而 StringBuffer 提供了同步机制,保证了在多线程下操作时的安全性。 再次,从字符串处理方式方面来说,String 是字符串常量,...

    浅谈Java StringBuilder为什么线程不安全

    首先,StringBuilder和StringBuffer都是通过一个char数组存储字符串的,不同的是String类里的char数组是final修饰的,是不可变的,而StringBuilder和StringBuffer的char数组是可变的。 在多线程环境下,使用...

    你知道String、StringBuffer和StringBuilder的区别吗

    总的来说,了解`String`、`StringBuffer`和`StringBuilder`的特性并根据实际情况选择合适的类,对于编写高效、线程安全的Java代码至关重要。在日常开发中,应尽量避免不必要的字符串对象创建,特别是在循环中,合理...

    面试题java StringBuffer和StringBuilder类常见操作和用法

    StringBuffer是线程安全的,意味着它的所有方法都是同步的,可以在多线程环境下使用,而不会出现数据不一致的情况。相对地,StringBuilder是非线程安全的,它的方法没有进行同步处理,因此在单线程环境下,...

    StringBuffer & StringBuilder 源码分析.docx

    StringBuilder 是线程不安全的,是 JDK 1.5 加入的。这两个类都实现了 CharSequence 接口,定义了字符串操作的接口,并且都继承了 AbstractStringBuilder 类,封装了大部分操作的实现。 AbstractStringBuilder 是 ...

    String&StringBuffer&StringBuilder三者之间的区别-经典解析.doc

    但是,StringBuilder没有实现线程安全,这意味着它不包含同步方法,因此在单线程环境中,StringBuilder通常比StringBuffer更快,因为它不需要线程同步的额外开销。 - **线程不安全**:在多线程环境下,使用...

    Java的线程安全与不安全集合.docx

    6. `StringBuilder`: 在字符串构建时,`StringBuilder`比`StringBuffer`更高效,但不提供线程安全性。 线程安全集合: 1. `Vector`: 类似于`ArrayList`,但它在每个操作上都添加了`synchronized`关键字,使其成为...

    Java StringBuffer & StringBuilder.pdf

    2. **性能**:由于线程安全机制的存在,`StringBuffer` 在多线程环境下的性能通常低于 `StringBuilder`。在单线程环境下,由于不需要进行额外的同步开销,`StringBuilder` 的性能优于 `StringBuffer`。 **二、...

    StringBuilder为什么线程不安全深入讲解

    `StringBuilder`和`StringBuffer`都继承自`AbstractStringBuilder`,它们的核心区别在于`StringBuffer`的方法上加了`synchronized`关键字,使其具备线程安全性。`StringBuilder`的`append()`方法在多线程环境下出现...

Global site tag (gtag.js) - Google Analytics