Получить время блокировки синхронизированного метода в Java - PullRequest
0 голосов
/ 06 мая 2020

У меня есть синхронизированный метод, который вызывается разными потоками, выполнение которого является взаимоисключающим между вызовами метода одного и того же объекта. Я хочу знать, что в случае, если метод был заблокирован, время, в течение которого он был заблокирован:

public class ManagerImpl implements Manager {

    public synchronized long entrarEnTramo() {
        movesomething()
        // This method must return long type with the time it has been blocked.
        // In the case it isn't blocked it returns -1.
    }

}

1 Ответ

1 голос
/ 06 мая 2020

Если вы можете изменить исходный код для этого метода, вы можете настроить его вручную.

public long entrarEnTramo() {
    long started = System.nanoTime();
    synchronized (this) {
        long taken = System.nanoTime() - started;
        movesomething();
        return taken;
    }
}

Но учтите, что это на самом деле не говорит вам, был ли он заблокирован вообще, а только время. Вы, вероятно, сможете определить разницу по затраченному времени.

Если нет, вам придется откатить собственную блокировку (тогда вы также можете реализовать таймауты блокировки, которые synchronized не не предлагаю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...