编译器与运行时都会注意到此变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序.
volatile变量不会被缓存在寄存器或其他处理器不可见的地方,因此在读取volatile变量时总会返回最新写入的值...从内存可见性来看:写入volatile变量相当于退出同步代码块,读取则相当于进入同步代码块(并不建议过度依赖此特性,通常比使用锁的代码还复杂)
仅当能简化代码的实现及对同步策略的验证时,才该用.若在验证正确性时需要复杂判断可见性...该变量不会与其他状态变量一起纳入不变性条件中
在访问变量时不需要加锁
2 发布与逸出
发布:使对象能够在当前作用域之外的代码中使用....ThreadLocal 变量类似于全局变量,它能降低代码的可重用性,并在类之间引入隐含的耦合性,使用时需要格外小心.
4 不变性
不可变对象:
满足以下条件:
对象创建以后其状态就不能修改
对象的所有域都是...final类型(final类型域是不能被修改的)
对象是正确创建的(在对象的创建期间,this引用没有逸出)
在被创建后其状态就不能被修改,且必线程安全.