局部变量线程安全分析

2. 局部变量线程安全分析

实现线程安全有三种方式:

1.无共享变量(也就不存在修改安全了)

2.共享变量不可变

3.同步

1
2
3
4
public static void test(){
int i=0;//局部变量线程不共享, 因此很安全
i++;
}

局部变量每个线程都会创建不同的实例,
没有共享行为, 就不会有线程安全不安全的问题

用final修饰的方法,子类能用但是不能重写

private修饰的方法, 子类无法继承更无法重写

====================
jdk的

image1

他们的每个方法都是线程安全的, 但是方法的组合未必线程安全
image2
注意这里组合没有线程安全,
因为get完成后立即释放锁, 别的线程可能就抢先put了,
然后你再put,就覆盖率了别人的数据,
想要组合线程安全,可以lua脚本/再给get+put组合操作加一把锁
===================
HashMap并非线程安全,其方法没有synchronized修饰
Date也是