How can I measure thread waiting time?

邮差的信 提交于 2019-12-04 04:09:16

问题


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!


回答1:


Try this:

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

long duration = endTime - startTime;



回答2:


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.




回答3:


Generally the methods which operates on locks accepts timeout as an argument. If you are using wait(), you can specify the amount of time by passing time to wait as argument. Check here for more details: http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait%28long%29.

If you are using Lock, then try tryLock method of it which accepts time it has to wait. Check this tutorial for an idea: http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html



来源:https://stackoverflow.com/questions/20382971/how-can-i-measure-thread-waiting-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!