}
static final class ReadWriteLocker {
final TIntObjectHashMap<MutableInt> map = new TIntObjectHashMap<MutableInt>();
public void lockForRead(int i) {
MutableInt val;
synchronized(map) {
if (! map.containsKey(i)) {
map.put(i, new MutableInt(1));
return;
}
val = map.get(i);
}
synchronized(val) {
while (val.get() == -1) {
try {
val.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
val.incr();
}
}