Java延时

在 Java 中实现延时操作主要有以下几种方式,根据使用场景选择合适的方法:

1. Thread.sleep()(最常用)

java

复制

下载

复制代码
try {
    // 延时 1000 毫秒(1秒)
    Thread.sleep(1000); 
} catch (InterruptedException e) {
    // 处理中断异常(通常恢复中断状态)
    Thread.currentThread().interrupt(); 
}

特点:

  • 简单易用,阻塞当前线程

  • 需处理 InterruptedException


2. TimeUnit(推荐,更语义化)

java

复制

下载

复制代码
import java.util.concurrent.TimeUnit;

try {
    TimeUnit.SECONDS.sleep(1);  // 延时 1 秒
    // 等价于 TimeUnit.MILLISECONDS.sleep(1000);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

优点 :时间单位更清晰(支持 NANOSECONDS/MICROSECONDS/MILLISECONDS/SECONDS 等)


3. ScheduledExecutorService(异步延时任务)

java

复制

下载

复制代码
import java.util.concurrent.*;

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

// 延时 1 秒后执行任务(异步不阻塞主线程)
scheduler.schedule(() -> {
    System.out.println("任务执行");
}, 1, TimeUnit.SECONDS);

// 关闭线程池(实际开发中根据业务决定关闭时机)
scheduler.shutdown(); 

适用场景:

  • 需要异步执行延时任务

  • 避免阻塞主线程

  • 支持定时周期性任务


4. Timer 类(旧版方案,不推荐新项目使用)

java

复制

下载

复制代码
Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        System.out.println("延时任务");
    }
}, 1000); // 延时 1 秒

缺点:

  • 单线程执行,任务相互影响

  • 抛出异常会导致整个 Timer 终止

  • 推荐用 ScheduledExecutorService 替代


5. Object.wait(timeout)(线程同步场景)

java

复制

下载

复制代码
synchronized (lock) {
    try {
        lock.wait(1000); // 释放锁并等待 1 秒
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}

注意:需在同步块中使用,会释放对象锁。


选择建议:

  1. 简单阻塞当前线程 → 用 Thread.sleep() 或 TimeUnit.sleep()

  2. 后台异步延时任务 → 用 ScheduledExecutorService

  3. 线程间协调等待 → 用 Object.wait(timeout)

  4. 避免在新项目中使用 Timer

⚠️ 注意:所有延时方法的时间精度受操作系统调度影响,不保证完全精确。

相关推荐
paopaokaka_luck16 分钟前
民宿管理系统 (AI民宿总结、协同过滤推荐算法、WebSocket 在线咨询、ECharts 经营分析、房态与结算联动、 民宿预订业务闭环)
java·人工智能·spring boot·websocket·数据分析·echarts·推荐算法
java资料站21 分钟前
十四、Spring AI Alibaba · 案例 · 基于 HumanInTheLoop 的内容审核系统
java·spring·状态模式
ydjs678899-bot23 分钟前
您的Next.js中间件匹配器配置可能会跳过您认为它保护的路由
开发语言·javascript·中间件
Chengbei1131 分钟前
JsOwl|AI 赋能 JS 敏感信息扫描器,AST + 正则、source‑map 源码还原、登录态爬虫输出交互式 HTML 报告
开发语言·javascript·网络·人工智能·爬虫·网络安全·自动化
David猪大卫33 分钟前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
geovindu35 分钟前
rust: Iterator Pattern
开发语言·后端·设计模式·rust·行为模式·迭代器模
SDWAN_Cheap1 小时前
深度解析什么是CDN加速:从原理到实践的技术拆解
开发语言·cdn加速
鬼手点金1 小时前
模型即 Agent:当模型本身成为产品
开发语言·前端·人工智能·python·机器学习
SunnyDays10111 小时前
如何使用 Java 提取 PPT 中的文字:整份文档、指定幻灯片与表格内容
java·powerpoint