增量操作符++不是原子的
AutomicLong所做的工作正是你想要的
线程封闭,把可变数据限制在单个线程内
安全的发布对象:保存在静态域中,作为类初始化的一部分,可以保存在volitile,final...或者正常访问锁定的域中,或者放到并发的集合中
当多个线程共享可变数据时,每个读或者写的线程都必须执行同步,否则就会造成活性失败和安全性失败
避免过度同步
为了避免活性失败和安全性失败,在一个被同步的方法或者代码块中...私有锁对象模式特别适用于为继承而设计的类,防止子类无意中修改基类的操作,反之亦然
有条件的线程安全类必须在文档中指明那个方法调用序列需要外部同步以及在执行这些序列的时候获得那把锁
慎用延迟初始化
除非绝对必要...如果标记程序元素而非类或者接口,考虑未来可能给标记添加更多信息,或者标记要适合于已经广泛使用了注解元素的框架,那么标记注解就是正确的选择
方法
检查参数的有效性
应该在发生错误之后尽快检测出错误 ex:...在细节消息中包含能捕获失败的信息
大量的描述信息没有意义,一个推荐的做法,在异常的构造器中而不是字符串细节中引入这些消息
努力使失败保持原子性
1,在操作之前检查参数的有效性
调整计算顺序使得任何可能失败的计算在对象修改之前发生