У меня есть следующий класс:Чтение и запись в коллекции
public class GroupsContainer{
private final List<Group> col;
public synchronized Group get(int ids){
return col.get(ids);
}
public synchronized void add(Group g){
col.add(g);
}
}
Теперь предположим, что некоторые нити хотели получить все элементы от 0 до 10:
List<Group> lst;
GroupContainer gc;
//staff
for(int i = 0; i < 10; i++)
lst.add(gc.get(i));
и в то же время другой поток пытается писать новые элементы от 0 до 10:
List<Group> lst;
GroupContainer gc;
//staff
for(int i = 0; i < 10; i++)
gc.add(i, lst.get(i));
мне нужно сделать следующее:
После того, как автор выпустит монитор, читатель должен сразу же заблокировать все записи писателя и не должен позволять писателю писать что-то еще, пока он не закончит чтение.
Это можно сделать? При текущей реализации это не сработает.
Но читатель и писатель, вероятно, являются оттисками разных классов. – user3663882
Итак? Если вы синхронизируете один и тот же экземпляр GroupContainer, блокировка - это GroupContainer, а не вызывающий класс. –
Действительно, это ты. – user3663882