This question already has answers here:
How to check if a thread is sleeping?
(5个答案)
5年前关闭。
我想知道如何知道线程是否正在 hibernate 。
我四处搜索并收集了一些信息,从这些信息中我编写了一个isSleeping():boolean方法,我认为我可以将它放在一个类中以确定线程是否在 hibernate 。我只想知道我可能错过了什么。注意:我没有0天的经验。
输出
(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