package li.util;
/**
* @author : 明伟
*/
public class ThreadUtil {
private static final String[] SKIP_PACKAGES = { "org.eclipse.jdt.internal.junit", //
"java.lang.Thread", "java.lang.reflect.Method", //
"sun.reflect.", //
"li.util.ThreadUtil", "li.mock.Mock",//
"org.junit.runners.", "org.junit.internal.runners.", //
"net.sf.cglib.proxy.", //
"li.aop.AopChain", "li.aop.AopEnhancer" };
/**
* 返回当前线程中 stackTrace 列表
*/
public static String stackTrace() {
return stackTrace(Thread.currentThread().getStackTrace());
}
public static String stackTrace(StackTraceElement[] stackTraceElements) {
String string = "";
for (int i = 0; i < stackTraceElements.length; i++) {
if (!skip(stackTraceElements[i])) {
string += "\n" + (i + "\t#" + stackTraceElements[i].getLineNumber() + "\t\t" + stackTraceElements[i].getClassName() + "." + stackTraceElements[i].getMethodName() + "()");
}
}
return string;
}
public static String stackTrace(StackTraceElement[] stackTraceElements, String regex) {
String string = "";
for (int i = 0; i < stackTraceElements.length; i++) {
String temp = "\n" + (i + "\t#" + stackTraceElements[i].getLineNumber() + "\t\t" + stackTraceElements[i].getClassName() + "." + stackTraceElements[i].getMethodName() + "()");
if (Verify.regex(temp, regex) && stackTraceElements[i].getLineNumber() > 0) {
string += temp;
}
}
return string;
}
/**
* 一个StackTraceElement是否应当跳过
*/
private static Boolean skip(StackTraceElement element) {
if (element.getLineNumber() < 1) {
return true;
}
for (String header : SKIP_PACKAGES) {
if (element.getClassName().startsWith(header)) {
return true;
}
}
return false;
}
public static void sleep(Number millis) {
try {
Thread.sleep(millis.longValue());
} catch (InterruptedException e) {
throw new RuntimeException("li.util.ThreadUtil.sleep()", e);
}
}
}