1、无状态的对象一定是线程安全的。
2、不恰当的执行时序,出现不正确的结果,定义为竞态条件。
3、单状态变量,使用原子类型
4、多状态变量交互,使用synchronzied,包括2部分,1、要锁定的对象 2、要保护的代码块。
被保护的代码块,操作可看成一个事务。
5、内置锁是可重入的,也就是自己去获取自己已经获得了锁的锁的时候,可以获得。
6、一种加锁约定:将所有可变对象都放入对象内部,通过内部锁来加持所有涉及可变对象的操作。
7,内部锁可以确保单个函数或代码块的原子性,但当多个内部锁保护的函数一块组成操作时,也许加锁保护。
8、要仔细权衡锁的大小,太大,影响性能。太小会打不成同步目的,或徒增复杂度。
要在安全性,性能,简单性这3个方面做平衡。