Java 学习笔记

所有文章
📖 最新文章 transmittable-thread-local 库 JOOR 反射库 Lombok 库:为你减少样板代码 Slf4j 日志组件的使用 加速maven、gradle依赖下载
📖 Java 基础 安装 第一个程序 使用 UTF-8 编写代码 空值 null 正则表达式 线程 日期/时间 匿名类 枚举 ThreadLocal 线程本地变量 动态代理 jar 命令

一个自定义的 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] 测试: 你好

( 本文完 )

文章目录