工具类代码
该工具类实现的功能:
- 日志打印
- 不会抛出受检查异常的 sleep
import java.time.LocalTime;
public class Utils {
/**
* 日志输出至控制台
* 格式: [线程名@线程ID ][时间] 日志
*
* @param format
* @param args
*/
public static void log(String format, Object... args) {
// 当前线程名称
String threadName = Thread.currentThread().getName();
long threadId = Thread.currentThread().getId();
StringBuilder threadInfo = new StringBuilder(String.format("%s@%s", threadName, threadId));
// 为了方便打印结果的查看,若线程名长度不足16,则补空格
while (threadInfo.length() < 16) {
threadInfo.append(" ");
}
// 当前时间 (时-分-秒)
LocalTime now = LocalTime.now();
String realFormat = String.format("[%s][%s] %s\n", threadInfo.toString(), now, format);
System.out.printf(realFormat, args);
}
/**
* 日志输出至控制台
*
* @param obj
*/
public static void log(Object obj) {
log("%s", obj);
}
/**
* 睡眠
* 该方法不会抛出受检查异常
*
* @param millis 毫秒数
*/
public static void sleep(long millis) {
long startMs = System.currentTimeMillis();
while(true) {
if (millis <= 0) {
return;
}
try {
Thread.sleep(millis);
break;
} catch (InterruptedException e) {
long currentMs = System.currentTimeMillis();
if (currentMs - startMs < millis) {
millis = millis - (currentMs - startMs);
startMs = currentMs;
} else {
break;
}
}
}
}
}
代码测试
public class UtilsTest {
public static void main(String[] args) {
Utils.log("你好");
Utils.sleep(1200);
Utils.log("测试: %s", "你好");
}
}
执行结果示例:
[main@1 ][20:07:26.127] 你好
[main@1 ][20:07:27.333] 测试: 你好