提问者:小点点

实践中的并发>清单4.13


以下是第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吗?


共1个答案

匿名用户

是的。你是对的。 但这不是线程代码或并发的问题。 这是一个计算机科学类型的问题,通常处理引用和指针。 一个引用指向一个对象。 如果像Java那样到处传递引用,那么这些引用就可以用来访问底层对象。