有什么方法可以检查有多少线程正在等待同步方法解锁?
我想知道线程何时调用同步方法:
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 提供了更多 powerful concurrency API这提供了更直接的控制和可见性。作为起点,有一个 Semaphore 类,它有一个方法 getQueueLength()这听起来可能就是您想要的。
2) 当一个同步方法被调用时,调用线程将等待直到该方法被解锁,这需要多长时间取决于带锁的代码需要多长时间来完成它的事情。在对象上等待 () 时,您可以指定超时。我不相信你可以用同步方法做到这一点。
关于java - 如何检查有多少线程正在等待同步方法解锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2440143/