/*******************************************************************************
* Copyright (c) 2005, 2014 springside.github.io
*
* Licensed under the Apache License, Version 2.0 (the "License");
*******************************************************************************/
package org.springside.modules.utils.concurrent;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.StringUtils;
/**
* 线程相关工具类.
*
* 1. 处理了InterruptedException的sleep
*/
public class ThreadUtil {
/**
* sleep等待, 单位为毫秒, 已捕捉并处理InterruptedException.
*/
public static void sleep(long durationMillis) {
try {
Thread.sleep(durationMillis);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
/**
* sleep等待,已捕捉并处理InterruptedException.
*/
public static void sleep(long duration, TimeUnit unit) {
try {
Thread.sleep(unit.toMillis(duration));
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
/**
* 纯粹为了提醒下处理InterruptedException的正确方式,除非你是在写不可中断的任务.
*/
public static void handleInterruptedException() {
Thread.currentThread().interrupt();
}
/**
* 通过StackTrace,获得调用者的类名.
*/
public static String getCallerClass() {
StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();
if (stacktrace.length >= 4) {
StackTraceElement element = stacktrace[3];
return element.getClassName();
} else {
return StringUtils.EMPTY;
}
}
/**
* 通过StackTrace,获得调用者的"类名.方法名()"
*/
public static String getCallerMethod() {
StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();
if (stacktrace.length >= 4) {
StackTraceElement element = stacktrace[3];
return element.getClassName() + '.' + element.getMethodName() + "()";
} else {
return StringUtils.EMPTY;
}
}
/**
* 通过StackTrace,获得调用者的类名.
*/
public static String getCurrentClass() {
StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();
if (stacktrace.length >= 3) {
StackTraceElement element = stacktrace[2];
return element.getClassName();
} else {
return StringUtils.EMPTY;
}
}
/**
* 通过StackTrace,获得当前方法的"类名.方法名()"
*/
public static String getCurrentMethod() {
StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();
if (stacktrace.length >= 3) {
StackTraceElement element = stacktrace[2];
return element.getClassName() + '.' + element.getMethodName() + "()";
} else {
return StringUtils.EMPTY;
}
}
}