Несколько потоков использовали общий ресурс в моей программе Java. Поток должен вызвать sync rpc для получения нового ресурса с удаленного компьютера, и только один поток может сделать это одновременно. Другой поток может потреблять ресурсы при возврате rpc. Теперь я использовал ReentrantLock для этого. Но производительность падает, когда многие потоки пытаются получить эту блокировку. Как я могу улучшить производительность?
long st = System.currentTimeMillis();
long timeout = 20;
while (System.currentTimeMillis() - st < timeout) {
if (lock.tryLock(timeout)) {
try {
if(resource is enough) {
return resource;
}
sync get resource from remote;
}
finally {
lock.unlock();
}
if(resource is enough) {
return resource;
}
}
}