一、简介
1.多线程编程要注意的几点:
安全性:永远不发生糟糕的事情
活跃性:某件正确的事情最终会发生(不会发生无限循环或者死锁)
性能:正确的事尽快发生(上下文切换消耗之类的)
二、线程安全
1.为了防止变量在线程中导致程序出错,可以有以下三种方式:
1)不在线程之间共享该状态变量
2)将状态变量改为不可变的常量
3)在访问状态变量时使用同步
3.当设计线程安全的类时,良好的面向对象技术、不可修改性,以及明晰的不变性规范都能起到一定的帮助作用。(比如:开发人员可以将状态变量保存在公开域中,而不是封装在每个单独的类中)
4.无状态对象一定是线程安全的。无状态对象:即不包含任何域,也不包含任何对其它类中域的引用
5.竞态条件:由于不恰当的执行时序而出现不正确的结果。(最常见的就是:先检查后执行的非线程安全操作)
6.应尽可能的使用现有的线程安全对象(如AtcomicLong)
7.要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量
8.要判断同步代码块的合理大小,需要在各种设计需求之间进行权衡,包括安全性(这个必须满足)、简单性和性能
9.当知心时间较长的技术或者可能无法快速完成的操作时(例如I/O),一定不要持有锁