java - 如何检查有多少线程正在等待同步方法解锁

标签 java multithreading synchronization

有什么方法可以检查有多少线程正在等待同步方法解锁?

我想知道线程何时调用同步方法:

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/

相关文章:

java - 使用 JAVA 将 .csv 导入 RTC

java - 如何动态调整 JFrame 的大小以包含具有不同内容大小的 JPanel?

java - 线程数组?

java - 为什么我不能 getImage()?

java - 如何让线程只修改自己

windows - Vagrant:将centos文件夹同步到windows

Java 同步类实例

c++ - InterlockedCompareExchange128 用法

java - 在登录方法上同步代码

java - 是否同步保留锁