java - 了解 vector 同步策略

标签 java multithreading vector

我正在阅读 B. Goetz Java 并发实践,现在我正在阅读向现有线程安全类添加功能的部分。他表示:

The synchronization policy of Vector is fixed by its specification, so BetterVector would not suffer from this problem.

@ThreadSafe
public class BetterVector<E> exends Vector<E>{
    public synchronized boolean putIfAbsent(E x){
        boolean absent = !contains(x);
        if(absent)
            add(x);
        return absent;
    }
}

所以,我试图弄清楚 Vector 的同步策略只能发现

Unlike the new collection implementations, Vector is synchronized.

是否意味着是通过这个对象同步的?或者它可能意味着任何(可能是私有(private))对象的同步。如果是这样,BetterVector<E>非常脆弱,因为它取决于当前同步策略的实现,甚至没有明确指定。

最佳答案

这是一个非常好的问题。你是对的,Vector 的同步方式似乎没有被指定。 (至少,我找不到任何规范)。

但是,当前的实现在对象本身上同步,而不是在内部对象上同步。虽然这种实现可能随时改变,但这不太可能发生。太多代码可能依赖于当前的实现。改变可能会破坏所有事情。我怀疑代码维护者会冒这个风险。

我的猜测是,依赖于当前实现的代码理论上极其脆弱,但由于相当保守的代码维护和对 Java 开发过程的公共(public)监督,实际上几乎没有风险。

关于java - 了解 vector 同步策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34605131/

相关文章:

java - 创建线程时出现 NullPointerException

c++ - 通过类的成员搜索类的 vector

c++ - 在这种情况下比较 std::vector 或 std::set 的时间复杂度 - 效率更高?

java - 如何将 chilkatsoft 添加到 netbeans java 中

java - 如何在单元测试中设置Spring注入(inject)的值?

java - 必须从 Blob 上传回调请求中调用

java - 在 bean 存档 (jar) 中定义和使用时,CDI 拦截器不起作用

c - 从线程更新全局变量

r - clusterExport到R并行中的单线程

python - 使用 numpy 获取 3D 空间中所有对象的相对位置