This question already has answers here:
How to check if a thread is sleeping?

(5个答案)


5年前关闭。




我想知道如何知道线程是否正在 hibernate 。
我四处搜索并收集了一些信息,从这些信息中我编写了一个isSleeping():boolean方法,我认为我可以将它放在一个类中以确定线程是否在 hibernate 。我只想知道我可能错过了什么。注意:我没有0天的经验。
//isSleeping returns true if this thread is sleeping and false otherwise.
public boolean isSleeping(){
    boolean state = false;
    StackTraceElement[] threadsStackTrace = this.getStackTrace();

    if(threadsStackTrace.length==0){
        state = false;
    }
    if(threadsStackTrace[0].getClassName().equals("java.lang.Thread")&&
            threadsStackTrace[0].getMethodName().equals("Sleep")){
        state = true;
    }
    return state;
}

最佳答案

更改“ sleep ”->“ sleep ”。此外,您不应该在this上使用stacktrace,您的方法应该接受Thread参数。考虑一下

    Thread t = new Thread(new Runnable(){
        public void run() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });
    t.start();
    Thread.sleep(100);
    if(t.getStackTrace()[0].getClassName().equals("java.lang.Thread")&&
            t.getStackTrace()[0].getMethodName().equals("sleep")){
        System.out.println("sleeping");
    }

输出
sleeping

09-10 14:48