一个自定义的 Java 工具类


#Java 笔记


工具类代码

该工具类实现的功能:

  • 日志打印
  • 不会抛出受检查异常的 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] 测试: 你好


( 本文完 )