我想知道这段代码是否会带来任何麻烦:
我有一个在多个线程之间共享的 vector 。每次线程必须从 vector 中添加/删除内容时,我都会在 synchronized
block 下进行。但是,主线程有一个调用:
System.out.println("the vector's size: "+ vec.size());
这不是同步
。
这会引起麻烦吗?
最佳答案
所有 Vector 方法本身都是同步的,因此只要您只围绕单个方法进行同步,您自己的同步就没有必要。如果您有多个相互依赖的方法调用,例如像 vec.get(vec.size()-2)
这样的东西来获取倒数第二个元素,你必须使用自己的同步,否则 vector 可能会在 vec.size() 和 vec 之间改变.get().
关于java vector 和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658697/