易截截图软件、单文件、免安装、纯绿色、仅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 =


相关文档:

Berkeley DB JAVA版本中,类增强器的使用

据文档所说,类增强器比用代理的方式速度上有优势。
有两种方式,
第一种是在类加载时动态处理,这个对现有程序不用修改。只需要改下运行的java脚本即可
对于Java 1.5如下所示
java -javaagent:lib/je-<version>.jar=enhance:packageNames ...
je-<version>.jar 就是Berkeley DB JAVA库的名字。 packageNa ......

Java编程规范

一、项目版本规范:
1、版本号命名格式:
V 主版本号.次版本号.修整版本号
a.初始版本号为V1.0.0;
b.类属性或类方法的内容发生变化时,主版本号和次版本号都不变,修整版本号加 1;
c.增加了类或接口方法时,主版本号不变,次版本号加 1,修整版本号复位为0;
d.增加了类或接口时,主版本号加1,次版本号复位为0 ......

Java笔试题【转】

1.写出程序运行结果
  
public
class
TestString {
    public
static
void
link(String a){
         a+="World"
;
    }
    public
static
void
main(String []a ......

Java中throw和throws的区别

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

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


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