У меня есть серверная служба, которая освобождает базу данных таблиц, если удовлетворяется определенный критерий.Это выглядит так:
public static void autoUnloadDbTable(final Configuration conf) {
final String mKey = getMapKey(conf);
final Table table = TABLES.get(mKey);
if (table != null) {
dblock.getLock().lock();
table.instance.dispose();
TABLES.remove(mKey);.....(2)
}
//here release lock when done...
}
Но есть другая операция, которая может выполняться вбок при выполнении вышеуказанной функции
public Table getTableLocked(final Lock lock) throws FactFinderException {
boolean loadTable = true;
// Get the current table instance
Table table = TABLES.get(mapKey);
// .....(1)
if (table != null) {
//do something
}
if (loadTable) table = loadTableLocked(table);
// lock the table, so the instance don't gets replaced
if (lock != null) lock.lock();
return table.instance;
}
В (1) мне нужно что-то положить, потому что еслипоток выполняет код в (2), а другой поток - в потоке (2), у которого уже есть объект таблицы, но, поскольку (2) выполняется, поэтому он удалит объект таблицы, а затем все, что находится за пределами (1), не будет иметьправильное значение .... любые предложения, пожалуйста ... ??