Java代码证明StringBuilder是线程不安全的
时间: 2023-06-01 22:05:33 浏览: 110
StringBuilder是线程不安全的,因为它的方法没有被同步。以下是一个简单的Java代码来证明StringBuilder是线程不安全的:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class StringBuilderTest {
private static StringBuilder sb = new StringBuilder();
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(100);
for (int i = 0; i < 100; i++) {
executor.execute(() -> {
sb.append("a");
System.out.println(sb.length());
});
}
executor.shutdown();
}
}
这个程序会创建100个线程,每个线程都会向StringBuilder中添加一个字符'a',并打印出StringBuilder的长度。当多个线程同时修改StringBuilder时,会出现竞态条件,导致结果不可预测,或者抛出异常。因此,为了保证线程安全,必须使用线程安全的替代方法,如StringBuffer或ConcurrentStringBuilder。
阅读全文