Высокопроизводительная модель ниток потребитель-производитель - PullRequest
0 голосов
/ 08 ноября 2019

Несколько потоков использовали общий ресурс в моей программе 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;
                        }
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...