不积跬步,无以至千里。不积小流,无以成江海。
竞态
竞态是指计算的正确性依赖于相对时间顺序或者线程的交错。 竞态不一定就导致结果不正确,它只是不排除结果时而正确时而错误的可能。
原子性
锁可以有效的保证一段代码的原子性。但使用时需要注意锁的范围,下面的代码展示了锁范围运用不当造成的后果。
1 |
|
使用 HashSet 进行去重后发现元素不足1000,说明在获取 numCopy 值时出现了重复。
可见性
关键字:volatile
可见性可以保证一个线程读取到变量相对新的值,但不能保证线程能够读取到相应变量的最新值。
有序性
volatile、synchronization 关键字都可以阻止重新排序。
示例
1 |
|
上述示例中演示了使用线程不安全的集合可能带来的后果。尽管它不是百分百发生,但在多线程中应当使用线程安全的对象或者使用排它锁。