有什么方法可以检查有多少线程正在等待同步方法解锁?
我想知道线程何时调用同步方法:
1) 有多少线程已经在等待调用该方法?
2)一旦调用该方法,需要等待该方法解锁多长时间?
解决方案:
我使用堆垛机答案解决了这个问题:
public class LockedClass {
public static int count;
public static void measuringClass() throws IOException{
long startTime = System.currentTimeMillis();
count++;
System.out.println("Threads waiting="+count);
lockedMethod(startTime);
count--;
System.out.println("Threads waiting="+count);
}
public static synchronized void lockedMethod(long startTime) throws IOException{
System.out.println("I spent="+(System.currentTimeMillis()-startTime)+" in the queue");
Hashtable<String, String> params = new Hashtable<String, String>();
params.put("param1", "test");
params.put("param2", "12345678");
String sessionId = Common.getSession(Common.executeHttpRequest(params));
}
}
1)我不相信您的代码可以达到这种级别的可见性。 Java提供了更多强大的并发API http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html它提供了更直接的控制和可见性。作为起点,有一个 Semaphore 类,它有一个方法获取队列长度() http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Semaphore.html#getQueueLength%28%29听起来这可能就是你想要的。
2)当调用同步方法时,调用线程将等待直到该方法被解锁,需要多长时间取决于带有锁的代码执行其操作所需的时间。当对对象进行 wait() 时,您可以指定超时。我不相信你可以用同步方法做到这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)