java并发之加锁机制
工具/原料
1
jdk1.8
2
IntelliJ
方法/步骤
1
当在servlet中添加一个状态变量时,可以通过线程安全的对象来管理servlet的状态以维护servlet的线程安全。
2
为了提升servlet的性能,将最近的计算结果缓存起来,当两个连续的请求对相同的数值进行操作时,可以直接使用上一次的计算结果,而无须重新计算。
3
要实现该缓存策略,需要保存两个状态,最近的数值,以及结果。
4
通过AtomicLong以线程安全的方式来管理计数器的状态。在这里是否可以使用类似的AtomicReference来管理最近执行数值和计算结果呢?
5
看下面的实例:
6
然而,这种方法并不正确,尽管这些原子引用本身都是线程安全的,但在上面的实例中存在着竞态条件,这可能产生错误的结果。
7
在线程安全性的定义中要求,多个线程之间的操作无论采用何种执行时序或交替方式,都要保证不变性不被破坏。
8
当在不变性条件中涉及多个变量时,各个变量之间并不是彼此独立的,而是某个变量的值会对其他变量的值产生约束。因此,当更新某一个变量时,需要在同一个原子操作中对其他变量同时进行更新。
9
要保持状态的一致性,就需要在单个原子操作中更新所有行管的状态变量。
上一篇:栈和队列的运用
下一篇:如何多线程进行工作?