多线程问题,主要是多线程执行时的顺序是随机的,无法保证同一代码的执行顺序,任意两步代码(非原子)操作都存在安全问题
以下常见的线程安全问题:
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代替