无同步方案
有一些代码天生就是线程安全的。
可重入代码
可重入代码(Reentrant Code
)这种又称纯代码(Pure Code
),指可以在代码
任何时刻中断它,转而执行另一段代码,而控制权返回后原来的程序不会出现任何
错误且对结果无影响。
可重入代码的特征
- 不依赖全局变量、存储在堆上的数据和公用的系统资源
- 用到的状态量都由参数中传入,不调用非可重入的方法
输入相同的数据,就能返回相同的结果,那就满足可重入性的要求
线程本地存储
线程本地存储(Thread Local Storage
),如果一段代码中所需要的数据必须与
其他代码共享,可以看这些共享数据能否保证在同一个线程中执行,如果能,就可以
把共享数据的可见范围限制在同一个线程之内,这样无需同步也能保证线程之间不出现
数据争用的问题。
可用
ThreadLocal
类实现。