个人对于线程安全的理解(内容会不断更新,只是个人理解,不具备权威性)

多线程操作同一资源,如果资源存在状态,那么就会引发线程安全的问题

以下为个人了解的部分解决线程安全问题的一些方法


1.使操作的资源具有不可变性

例如使用final修饰,资源变为常量

2.使用多例模式,使用局部变量

每个对象都是不同的,操作的局部变量也是独一份的,就不会有安全问题

3.使用ThreadLocal修饰

ThreadLocal修饰的变量是每个线程独享一份的,也是安全的

可以称之为进程的局部静态变量Static memory local to a thread

4.对有状态的资源加锁(synchronized)

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

加锁会显著降低性能,尽量减少加锁的资源,只对关键语句加锁

5.使用volatile关键字

volatile关键字使资源被所有线程可见,所有线程操作的是同一份资源,但变化是可见的,

资源被从系统内存加载到内部缓存,对资源修改后再将操作回写到系统内存,因为资源是可见的,所以当其他线程发现这部分资源被修改后,那么之前缓存里的数据就会失效,

如果有要操作这个资源,需要从系统内存重新加载

这个操作不锁总线,只是锁缓存,所以开销小于synchronized



猜你喜欢

转载自blog.csdn.net/aaronmer/article/details/78912791