public class Channel {
private List current;
public synchronized String build() {
// здесь нужна блокировка на current
current.clear();
current.add(some...);
// здесь уже не нужна на current
}
public List getCurrent() {
return current;
}
}
public class ChannelMixer {
private Channel channel;
public synchronized String build() {
List selected = new ArrayList();
selected.addAll(channel.getCurrent()); // здесь нужно дождаться пока завершиться модификация current, и только затем его прочитать
}
}
Кто-то может вызвать Channel#build(), в свою очередь параллельно может быть запущен ChannelMixer#build(). Мне нужно, чтобы во время Channel#build(), на месте где происходит модификация Channel#current выставлялась блокировка на это поле, чтобы никто другой из вне не мог читать это поле (т.е. ожидал пока завершится модификация current в build()).
Собственно как сделать блокировку на current?