Vector非线程安全

Vector的方法加了同步锁,但对于复合操作未加锁,是非线程安全的。如经典的put-if-absent。
if (!vector.contains(element))
    vector.add(element);
}
在contains和add之间有时间间隔,可能导致执行add时,其他线程已经add过,基于错误假设add,导致非线程安全。
vector需对符合操作加锁,如:
  public  boolean putIfAbsent(E x) {
synchronized(v) {
            boolean absent = !contains(x);
            if (absent) {
                add(x);
            }
        }
        return absent;
    }
    
Vector和ArrayList都是实现了List接口,但Vector非线程安全,而且采用同步锁,强阻塞,影响性能,不推荐使用,应该废弃。

你可能感兴趣的:(#,集合)