在没有同步的情况下,编译器、处理器以及运行时都可能做指令重排。执行结果可能会出现错误
volatile变量
编译器与运行时不会进行指令重排,不会进行缓存,使用volatile变量要满足以下条件:
发布:使一个对象能够在当前作用域之外的代码中使用
逸出:当某个不应该发布的对象被发布时
实现线程安全的最简单方式之一:单线程内访问数据
****
- Ad-hoc线程封闭
- 栈封闭:局部变量
- ThreadLocal类:ThreadLocal提供了get、set等接口,为每个使用该变量的线程都有一份独立的副本,因此get总是返回当前执行线程在调用set时设置的最新值。通常用于防止对可变的单实例变量或全局变量进行共享。
不可变对象一定是线程安全的。不可变对象需满足以下条件:
并发程序共享对象策略:
原文:https://www.cnblogs.com/zeekik/p/11735682.html