Vector的复合操作,会再次出现线程安全问题。
import java.util.Vector;public class Demo {public static void main(String[] args) {new Thread(() -> {test();},"A").start();new Thread(() -> {test();},"B").start();}static Vector<Integer> vector = new Vector<>();//解决办法:符合操作加锁private static void test() {for (int i = 0; i < 10; i++) {vector.add(i);}for (int i = 0; i < vector.size(); i++) {System.out.println(Thread.currentThread().getName() + vector.get(i));vector.remove(i);i--;}}}
vector的每个方法都加了synchronized 是同步的,但是把两个同步的方法在同一个线程中就不能保证原子性了。
如上面:vector.add(i); 和 vector.remove(i);
