作用域相关的陷阱与边界情况
1. 线程安全问题
在 Java 编程中,线程安全是一个复杂且重要的问题。有些类被设计为线程安全的,例如 MySafeObject2 ,当使用 set() 方法更改其依赖项时,所有线程都能立即看到这些更改。然而,并非所有类都如此,比如下面这个 MyUnsafeObject 类:
import net.jcip.annotations.NotThreadSafe;
@NotThreadSafe @Singleton
public class MyUnsafeObject {
private Dependency dep1;
private Dependency dep2;
@Inject
public void set(Dependency dep1, Dependency dep2) {
this.dep1 = dep1;
this.dep2 = dep2;
}
public Dependency getDep1() { return dep1; }
public Dependency getDep2() { return dep2; }
...
}
MyUnsafeObject 存在严重缺陷,因为 Java 语言不能保证除了设置依赖项的线程之外的其他线程能看到这些依赖项(在没有额外同步的情况下)。这是由于 Java 虚拟机(JVM)管理线程的方式,线程可能会保
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



