以下是第72页的一个片段:
@ThreadSafe
public class BetterVector<E> extends Vector<E> {
public synchronized boolean putIfAbsent(E x) {
boolean absent = !contains(x);
if (absent)
add(x);
return absent;
}
}
根据Brian的说法,上面的类是线程安全的。 但是正如您所看到的,eX
实际上是一个可变类。 如果将absent
计算为true
后,x
的值发生变化,会发生什么情况? 这难道不是一种违规行为,可能会导致相当严重的bug吗?
是的。你是对的。 但这不是线程代码或并发的问题。 这是一个计算机科学类型的问题,通常处理引用和指针。 一个引用指向一个对象。 如果像Java那样到处传递引用,那么这些引用就可以用来访问底层对象。