gpt4 book ai didi

java - 为什么以下 Vector 代码完全损坏?

转载 作者:行者123 更新时间:2023-11-29 07:42:24 25 4
gpt4 key购买 nike

来自: Synchronization in Vectors in Java

就同步而言,为什么下面的代码会被破坏?vector类是不是在自己的对象上同步(this)?

  // BROKEN CODE, needs external synchronization
// only add an element if the vector is empty
if(vector.isEmpty())
vector.add(anElement);

更新:

按照下面的答案(来自 jon Skeet 和 Pshemo),它不会使 vector 变得几乎无用(我们有 arraylist)吗?

因为我们无论如何都需要手动同步以进行任何实际使用。如果是,是什么阻止 Java 至少将 vector 标记为已弃用?

最佳答案

Is the vector class not synchronized on its own object (this)?

是的,但仅限于每个单独的操作。

这里我们有两个操作:

if (vector.isEmpty())
vector.add(anElement);

在检查 isemptyadd 调用之间,不同的线程可能会添加一个项目。解决方法是在组合 操作上添加同步:

synchronized (vector) {
if (vector.isEmpty()) {
vector.add(anElement);
}
}

关于java - 为什么以下 Vector 代码完全损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28829471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com