为什么这个同步块似乎需要很长时间才能获得锁定?
2022-09-04 19:52:34
我是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”上没有“同步”的任何修改是否也可以锁定对象?