易截截图软件、单文件、免安装、纯绿色、仅160KB

JAVA并发编程笔记(3)

Publication and Escape 发布一个对象意味着能够从它能够从它当前范围之外被访问到。比如,保存可以被其他代码找到的这个对象的一个引用,或者将其作为一个非私有方法的返回值,或者将其作为参数传递给其它的类。 public static Set<Secret> knownSecrets;
public void initialize() {
knownSecrets = new HashSet<Secret>();
}
这个knownSecrets就被发布了,并且,knownSecrets里面添加的所有secret也都被发布出去了。
class UnsafeStates {
private String[] states = new String[] {
"AK", "AL" ...
};
public String[] getStates() { return states; }
}
这个states就被发布了,而且带来的问题是任何调用者都能够修改里面的内容,这样,很不安全。
public class ThisEscape {
public ThisEscape(EventSource source) {
source.registerListener(
new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
});
}
}
看明白这个ThisEscape为什么被发布了么?因为它发布了EventListener,而内部类会带有一个隐式的对外部类的引用。
另外,上面这个类的一个严重问题是,在构造方法中this引用escape了。这也就意味着这个对象在被发布的时候还处于一个不完整的状态。一个常见的情形就是在类的构造方法中启动一个线程。When an object creates a thread from its constructor, it almost always shares its this reference with the new thread, either explicitly (by passing it to the constructor) or implicitly (because the Thread or Runnable is an inner class of the owning object). 当然这本身没什么问题,但最好不要在构造方法中就启动这个线程,而是把Thread.start()放到一个单独的init方法中供其它对象调用。
要避免不完全构造的问题,可以采用下面的方式:
public class SafeListener {
private final EventListener listener;
private SafeListener() {
listener = new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
};
}
public static SafeListener newInstance(EventSource source) {
SafeListener safe =


相关文档:

Java中throw和throws的区别

系统自动抛出的异常
所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。
语句抛出的异常
用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。
throw是语句抛出 ......

Java语言中关键字讲解(二)transient的用途

1.什么是序列化
对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可 能需要 将 对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力 。叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的序列化(Serialization) 。序列化 ......

【奋斗第一天】菜鸟学习Java之我的面向对象观


大学两年了,一直浑浑噩噩,最近上了一些学习论坛,发现自己的知识太匮乏了,感觉怎么的自己也是个软件专业的学生,学了两年讲到应用却什么都不会,于是我觉得开始奋斗的人生!!!于是我选择了Java这么语言作为我奋斗的起点,原因很多,第一,在大学学过C和C++(只是学过,学的很不好),所以有点编程的基础吧,第二,Ja ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号