java sleep 如何替代
使用 TimeUnit 替代 Thread.sleep
TimeUnit 是 java.util.concurrent 包中的一个枚举类,提供了更易读的睡眠方式。例如:
TimeUnit.SECONDS.sleep(1); // 睡眠1秒
TimeUnit.MILLISECONDS.sleep(500); // 睡眠500毫秒
使用 ScheduledExecutorService 定时任务
通过 ScheduledExecutorService 可以实现更灵活的延迟执行,避免直接阻塞线程:

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.schedule(() -> {
System.out.println("任务执行");
}, 1, TimeUnit.SECONDS); // 延迟1秒执行
使用 LockSupport.parkNanos 替代
LockSupport 提供了更底层的线程阻塞方式,适合高精度延迟:

LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(500)); // 睡眠500毫秒
使用 Object.wait 结合条件控制
通过 Object.wait 可以实现线程睡眠,同时支持条件唤醒:
synchronized (lock) {
lock.wait(1000); // 睡眠1秒,可被notify唤醒
}
使用 CompletableFuture.delayedExecutor(Java 9+)
Java 9 引入了 delayedExecutor,支持延迟执行异步任务:
CompletableFuture.runAsync(() -> System.out.println("延迟执行"),
CompletableFuture.delayedExecutor(1, TimeUnit.SECONDS));
注意事项
- 高精度需求优先选择
LockSupport或ScheduledExecutorService。 - 避免在 UI 线程或主线程中使用阻塞操作。
- 结合中断机制处理睡眠中的线程唤醒需求。






