Я новичок в многопоточности в java, и у меня есть вопрос, который может показаться тривиальным.
Мне нужно отлаживать стороннюю часть кода, и мне нужна какая-то основная информация, чтобы знать, где искать проблему, потому что код очень большой.
Когда выполняется следующий код:
public void method()
{
long startTime = System.currentTimeMillis();
synchronized (obj)
{
log( "time:" + System.currentTimeMillis() - startTime + " ms" );
...
}
}
Я получаю:
11:13:12 - time: 3816 ms
...
11:14:14 - time: 0 ms
Почему занимает так много времени (3816 мс), чтобы получить блокировку для объекта? Где я должен смотреть? Например, я бы предположил, что возможным ответом будет поиск кода, который получает блокировку для "obj", то есть блока, например:
synchronized (obj) { ... }
Или возможно, что любая модификация объекта obj без "синхронизированного" может также блокировать объект?