... без дополнительной синхронизации? Ниже приведенный ниже класс Tree предназначен для доступа к нескольким потокам (это одноэлементный, но не реализованный через enum).
class Tree {
private volatile Node root;
Tree() {
root = new Node();
// the threads are spawned _after_ the tree is constructed
}
private final class Node {
short numOfKeys;
}
}
- Обновления поля
numOfKeys
будут видны в потоках читателей без какой-либо явной синхронизации (обратите внимание, что и читатели, и писатели должны получить экземплярReentrantReadWriteLock
- тот же экземпляр для каждого node - но запрещающий это)? Если бы не было достаточного количества летучихnumOfKeys
? - Изменяет корень так же просто, как
root = new Node()
(только поток записи будет изменять корень, кроме основного потока, который вызывает конструктор дерева)
по теме:
- несколько полей: volatile или AtomicReference?
- Является ли достаточно изменчивым для изменения ссылки на список?
- Являются ли изменяемые поля в объекте POJO потокобезопасными, если они хранятся в concurrentHashMap?
- Использование ключевого слова volatile с изменяемым объектом
РЕДАКТИРОВАТЬ: заинтересован в семантике после Java 5