Здравствуйте, Георгий, Вы писали:
Г>Здравствуйте, ingie, Вы писали:
I>>Блокировка это, конечно, хорошо, но её придётся делать почти везде где происходит вызов getCurrent().
Г>Речь шла о блокировке на current. В том числе, в методе getCurrent().
Блокировка в getCurrent() не поможет, если где-то будет написано
c = getCurrent();
doSome(c);
Да и вообще она почти ничему не поможет.
Если уж с блокировками, то может лучше
class Channel {
...
forEach(Visitor v) {
synchronized(current) {
for (o : current) {
v.visit(o);
}
}
}
...
}
И без getCurrent() вообще.
Иначе не будет гарантий как я понимаю. Или нет?
I>>Если на самом деле не нужно ...
Г>Вопрос в том, является ли присвоение атомарной операцией.
В current может лежать только старое значение или новое значение, никаких промежуточных вариантов быть не может,
как я понимаю. Допустим меня устраивают оба варианта.
Так можно или нет?