How can I measure thread waiting time?

Viewed 4046

I couldn't find out how to measure the time that a Thread is waiting locked. I have to determine if a Thread is waiting locked more than 1 second and if so to run another Thread instead. Thanks!

3 Answers

Try this:

long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();

long duration = endTime - startTime;

Time it using Sytem.nanoTime(); just before and after the wait.

long start = System.nanoTime();
wait();
long time = System.nanoTime() - start; // nanos

Or:

long start = System.nanoTime();
synchronized (objHere)
{
    long time = System.nanoTime() - start; // nanos
    // ...
}

Note: If a Thread is locked, the scheduler will continue with other Threads. You don't have to do this manually. That is the idea of threads. Maybe you are facing a deadlock? Wikipedia says it nicely:

A deadlock is a situation in which two or more competing actions are each waiting for the other to finish, and thus neither ever does.

Related