当前位置: 首页 > ops >正文

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() {@Overridepublic 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

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

http://www.xdnf.cn/news/14206.html

相关文章:

  • python中的模块化编程:日期模块、math算术模块、random模块
  • 温度对IO通信的影响
  • pythonday46
  • Python 标准库之 math 模块
  • 智慧水利可视化:水利水电工程数智化
  • 快速排序C++实现
  • IO扩展的一种简易方法
  • ECharts 图表生成示例
  • CentOS7报错:Cannot find a valid baseurl for repo: base/7/x86_64
  • day034-rsync异地容灾
  • org.springframework.cloud.openfeign 组件解释
  • JAVA实战开源项目:在线课程管理系统 (Vue+SpringBoot) 附源码
  • 超强人工智能解决方案套件InfiniSynapse:精准的业务理解、对各种数据源进行全模态联合智能分析--部署安装@Ubuntu22.04 @Docker
  • 【Z Arcade】八色部落战争各阵营兵种分析级排名
  • 【C语言练习】096. 使用C语言实现简单的游戏逻辑
  • RK AndroidFramework 内置应用可,卸载,恢复出厂设置恢复安装
  • 蓝桥杯国赛前一晚知识点准备(十六届python)
  • 多线程——锁
  • Keepalived 高可用
  • 基于SpringBoot+JSP开发的招投标采购信息平台
  • 插入点(position) 和对齐点(AlignmentPoint)详解——CAD c#二次开发
  • 59、定制化原理-SpringBoot定制化组件的几种方式
  • STM32 vs RT1176:正交编码器实现原理与工程实践全解析
  • AI-调查研究-06-“冷水澡”对生理健康的影响与机制【下篇】
  • LangChain自动化工作流实战教程:从任务编排到智能决策
  • FOC无刷电机控制:ABZ与SPI信号选择
  • 【0.1 漫画计算机组成原理】
  • Vue3 + TypeScript + Element Plus 使用【设置表格列宽,组合式函数 hook】在原有页面实现表格列宽设置本地持久化实例总结
  • MySQL(75)如何进行增量备份和恢复?
  • 2.4 机器人运动控制