jeudi 5 mars 2015

Why does it seem to take a long time for this synchronized block to get a lock?



I am new to multi-threading in java, and I have a question some might find trivial.


I have to debug a third party piece of code and I need some basic information, to know where to look for the problem because the code is very large.


When the following code runs:



public void method()
{
long startTime = System.currentTimeMillis();
synchronized (obj)
{
log( "time:" + System.currentTimeMillis() - startTime + " ms" );
...
}
}


I get:



11:13:12 - time: 3816 ms
...
11:14:14 - time: 0 ms


Why is taking so long (3816 ms) to get the lock for the object? Where should I look? For example, I would imagine a possible answer would be to look for code which acquires the lock for "obj" i.e. block such as:



synchronized (obj) { ... }


Or is it possible that any modification at the object "obj" without "synchronized" can also lock the object?




Aucun commentaire:

Enregistrer un commentaire