после прочтения «java параллелизма на практике» в пункте 3.4 говорится:
"
Объект является неизменным, если:
• Его состояние не может быть изменено после построения; и.
• Все его поля являются окончательными, и.
• Он правильно построен (, эта ссылка не скрывается во время построения ).
"
А теперь я есть класс:
class A {
private final static ConcurrentMap<String, A> cache = new ConcurrentHashMap<>();
private final code;
private final name;
A(String code, String name) {
this.code = code;
this.name = name;
cache.put(code, this); // does this escaped? and make immutable A not thread safe anymore?
}
public static A getA(String code) {
return cache.get(code);
}
}
, и приведенная ниже ссылка кажется полезной, но я все еще в замешательстве.
ссылка: Самостоятельная ссылка в конструкторе считается "экранирующей"?
summary: в вышеприведенном случае в конструкторе экранируется "this"? и является ли неизменяемый экземпляр все еще поточно-ориентированным?
более того, если я переместу переменную кэша в другой класс, что произойдет?