对象的发布与逸出
发布(publish) 使对象能够在当前作用域之外的代码中使用
逸出(escape) 当某个不应该发布的对象被发布了
常见逸出的有下面几种方式:
-  
静态域逸出
 -  
public修饰的get方法
 -  
方法参数传递
 -  
隐式的this
 
静态域逸出:
public修饰get方法:
方法参数传递我就不再演示了,因为把对象传递过去给另外的方法,已经是逸出了~
下面来看看该书给出this逸出的例子:
逸出就是本不应该发布对象的地方,把对象发布了。导致我们的数据泄露出去了,这就造成了一个安全隐患!理解起来是不是简单了一丢丢?
安全发布对象
上面谈到了好几种逸出的情况,我们接下来来谈谈如何安全发布对象。
安全发布对象有几种常见的方式:
-  
在静态域中直接初始化 :
public static Person = new Person();-  
静态初始化由JVM在类的初始化阶段就执行了,JVM内部存在着同步机制,致使这种方式我们可以安全发布对象
 
 -  
 -  
对应的引用保存到volatile或者AtomicReferance引用中
-  
保证了该对象的引用的可见性和原子性
 
 -  
 -  
由final修饰
-  
该对象是不可变的,那么线程就一定是安全的,所以是安全发布~
 
 -  
 -  
由锁来保护
-  
发布和使用的时候都需要加锁,这样才保证能够该对象不会逸出
 
 -  
 

京公网安备 11010502036488号