【发布时间】:2023-04-10 16:47:01
【问题描述】:
好的,据我了解,最好创建一个final static 用于同步的对象。
但是,我也读到如果对象引用没有改变,那么它不会有并发问题。
以下代码是否违反同步性?
class Foo {
private static ArrayList<Client> clients = null;
public Foo() {
clients = new ArrayList<>();
//add stuff to list here..
}
public void addClient(Client C) {
synchronized(clients) {
clients.add(C);
}
}
}
如果客户ArrayList 从未直接公开(仅通过Getters 除外),我是否必须使客户成为最终对象或创建最终对象?换句话说,我从不为 clients 数组提供 set 方法,因此引用永远不会改变。
【问题讨论】:
-
如果引用没有改变,那为什么不把它定下来呢?
-
我在这里没有看到任何问题,但为什么不把它定下来呢?
-
我在想 C++ 中的 final = const,所以如果我这样做了,我就无法添加任何东西。但谷歌搜索后,我发现它不一样。
-
我看不出有什么理由在这里使用 static,如上所述,你最好使用 final
标签: java synchronized