【总结,持续更新】java常见的线程不安全,你以为的线程安全

多线程问题,主要是多线程执行时的顺序是随机的,无法保证同一代码的执行顺序,任意两步代码(非原子)操作都存在安全问题

以下常见的线程安全问题:

1. 锁在String

String str="a";

synchronized(str)

{

str = "b";  //str变为一个新对象,锁失效,字符的赋值是新new一个String然后赋值的

}

2. i++,使用java.util.concurrent.atomic下的原子类代替来做多线程的计数器

i++是两步,读取i的变量的值,然后更新+1,所以不安全, 使用AtomicInteger


扫描二维码关注公众号,回复: 892965 查看本文章

3. HashMap,ArrayList,使用ConcurrentHashMap,CopyOnWriteArrayList代替

4.StringBuilder,使用StringBuffer代替

猜你喜欢

转载自blog.csdn.net/c5113620/article/details/80308408