java的延时

盘点JAVA中延时任务的几种实现方式 (1)基于内存,应用重启(或宕机)会导致任务丢失 (2)基于内存存放队列,不支持集群 (3)依据compareTo方法排列队列,调用take阻塞式的取出第一个任务(不调用则不取出),比较不灵活,会影响时间的准确性。(1)基于内存,应用重启(或宕机)会导致任务丢失 (2)基于内存挂起线程实现延时,不支持集群 (3)代码耦合性大,不易维护 (4)一个任务就要新建一个线程绑定任务的执行,容易造成资源浪费。(1)基于内存,应用重启(或宕机)会导致任务丢失 (2)基于内存存放任务,不支持集群。 阅读详情

在Java中有时候需要使程序暂停一点时间,称为延时。普通延时用Thread.sleep(int)方法,这很简单。它将当前线程挂起指定的毫秒数。如

Java 代码复制内容到剪贴板
  1. try
  2. {
  3. Thread.currentThread().sleep(1000);//毫秒
  4. }
  5. catch(Exception e){}

在这里需要解释一下线程沉睡的时间。sleep()方法并不能够让程序"严格"的沉睡指定的时间。例如当使用5000作为sleep()方法的参数时,线 程可能在实际被挂起5000.001毫秒后才会继续运行。当然,对于一般的应用程序来说,sleep()方法对时间控制的精度足够了。

但是如果要使用精确延时,最好使用Timer类:

Java 代码复制内容到剪贴板
  1. Timer timer=new Timer();//实例化Timer类
  2. timer.schedule(new TimerTask(){
  3. public void run(){
  4. System.out.println("退出");
  5. this.cancel();}},500);//五百毫秒

这种延时比sleep精确。上述延时方法只运行一次,如果需要运行多次, 使用timer.schedule(new MyTask(), 1000, 2000); 则每间隔2秒执行MyTask()

 

 

 

 

 

 

 

 

 

1、 用Thread就不会iu无法终止

new Thread(new Runnable() {
            public void run() {
                while (true) {
                    test();
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            private void test() {
                // TODO Auto-generated method stub
            }
            public Runnable start() {
                // TODO Auto-generated method stub
                return null;
            }
        }.start());

2、 或者用现成的

javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {   public void actionPerformed(ActionEvent e) {     repaint();   } };

timer.start();

3、下面这个方法测试过可以用 java非线程延时

import java.awt.Robot;
import java.util.Date;

public class test {
     public   static   void   main(String[]   args)   throws   Exception{   
         Robot  r   =   new   Robot(); 
         System.out.println( "延时前:"+new Date().toString()  ); 
         r.delay(   2000   );   
         System.out.println(   "延时后:"+new Date().toString()   );   
   }   
}

 

  4、 用这下面的TimeTask类(指定延时)

java里面的sleep()并不能精确定时,TimeTask可以:例下面的小程序:

import java.util.*;

public class test {
    public static void main(String[] args) {
        Timer timer = new Timer();// 实例化Timer类
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("退出");
                this.cancel();
            }
        }, 5000);// 这里百毫秒
        System.out.println("本程序存在5秒后自动退出");
    }
}

 

在java下使用延时线程池 使用延时队列可以比较方便的实现文章开头说的业务场景,但是延时队列本质也是JVM在等待,使用的时候要控制同时提交队列的数量和延时时间,如果对于高并发的情况,建议还是使用消息队列的方式实现。 阅读详情

相关推荐

java实现一个小程序语句的延迟执行的小demo

由于个人需要使用,结合API和网友们的相关介绍,自己写了一个小小的demo可以通过java实现一个小程序语句的延迟执行,希望给需要的人提供帮助吧。

Java延时的三种方法

Java延时的三种方法(Robot,Thread和Timer)

weixin_53607413的博客 9865

IEPE加速度同步采集卡、振动信号同步模块、温震一体八路高速采集

WJ288产品是一种物联网和工业以太网采集模块,实现了传感器数据采集并发送到网络。IEPE是“Integrated Electronics Piezo-Electric”的缩写,即集成电路型压电式传感器。这种带内置电子器件的压电传感器已成为工业应用领域的标准。半导体电路将压电传感器的高阻抗信号转换为更容易传输的低阻抗电压信号。借助IEPE,只需一根任意长度的标准电缆即可实现电源供给和信号传输,不会因电缆移动而产生测量误差。

wayjun0903的博客 733

一口气说出 6种 延时队列的实现方法,面试官也得服

JDK的DelayQueue JDK ScheduledExecutorService 定时器轮询遍历数据库记录 利用quartz等定时任务 netty时间轮 Quartz 定时任务 Redis 实现 RabbitMQ 实现延时队列 https://www.jianshu.com/p/a8c1458998aa ...

程序员内点事 3087

从理论到实践:笛卡尔空间阻抗控制的实现挑战与变体解析

本文深入探讨了笛卡尔空间阻抗控制的核心原理、工程实现中的五大挑战及经典变体实战解析。通过详细的数学建模和实际案例分析,揭示了阻抗控制在工业机器人、医疗设备等领域的应用价值,特别是在力感知精度、动力学模型校准和实时计算等方面的关键技术突破。

weixin_30952535的博客 449

Vivado IP核与License许可全解析:从免费到收费,从评估到部署

本文全面解析Vivado IP核与License许可机制,从免费到收费IP核的选型指南到License的申请与部署策略。详细介绍了Xilinx官方IP核的优势与局限,第三方IP核的风险与应对,以及实战中的资源优化技巧和版本兼容性问题,帮助开发者高效利用Vivado工具链。

weixin_29169505的博客 367

Java延时消息的实现

Java延时消息的实现

果酱 の 博客 6383

保姆级教程:在SIwave 2024 R2中搞定TDR仿真,手把手教你分析USB 3.0差分线阻抗

本文提供了一份详细的SIwave 2024 R2 TDR仿真教程,重点讲解如何分析USB 3.0差分线阻抗。从项目准备、参数配置到结果分析,逐步指导工程师完成完整的仿真流程,并分享实战经验和高级技巧,帮助提升信号完整性分析能力。

weixin_33670786的博客 498

java实现延迟消息的几种方式

一些消息或任务我们可能不希望立即执行, 希望在一定时间后或者某个时间点的前一定时间执行, 即在某个时间点执行某个任务。

SHENMU1的博客 2584

EndNote X9 参考文献附录列表 格式调整

EndNote X9 插入参考文献常见问题总结

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2570

OsgEarth —— 笔记1 - 创建地球的earth文件

效果         正文      1、准备一张全球的渲染图(tif格式)、一张全球的高程图(tif格式)        2、创建并编写.earth文件           在步骤1目录下创建china-simple.earth,并将如下内容写入。 <map name="Globe" type="geocentric" version="2"> <!-- 全球影像图 --> <image name="GlobeImage" driver="gdal"> &l

7681

JAVA的延时函数使用

在Java中有时候需要使程序暂停一点时间,称为延时。普通延时用Thread.sleep(int)方法,这很简单。把它将当前线程挂起指定的毫秒数。如 try { Thread.currentThread().sleep(1000);//单位:毫秒 } catch(Exception e){} 在这里需要解释一下线程沉睡的时间。sleep()方法并不能够让程序"严格"的沉睡指定的时间。例如当使用5000作为sleep()方法的参数时,线 程可能在实际被挂起5000.001毫秒后才会继续运行。当然,对于一般的应

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 2万+

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

曼岛_的博客 633

Java延时

/ 等价于 TimeUnit.MILLISECONDS.sleep(1000);// 释放锁并等待 1 秒。System.out.println("延时任务");⚠️ 注意:所有延时方法的时间精度受操作系统调度影响,不保证完全精确。System.out.println("任务执行");// 关闭线程池(实际开发中根据业务决定关闭时机)// 延时 1 秒后执行任务(异步不阻塞主线程)// 处理中断异常(通常恢复中断状态)// 延时 1000 毫秒(1秒)

BillKu的博客 1384

【人工智能】架构演进:基于本体论与 LLM Agent 的供应链备件决策闭环实践

本文探讨了如何将本体论(Ontology)与大语言模型(LLM)Agent结合,构建供应链备件管理的智能决策系统。针对LLM在垂直领域存在的幻觉和逻辑缺陷问题,提出通过本体论建立结构化知识框架,形成四层架构:知识建模、动态感知、深度分析和决策闭环。系统利用图数据库实例化领域本体,融合多源数据实现实时感知,结合图谱推理和时序预测进行确定性分析,最终通过工具调用完成决策执行。技术选型推荐Gemini 1.5 Pro、Neo4j和LangChain等工具,实现从自动化到智能化的升级。该架构为工业领域提供了可解释、

奶爸的编程之路,也就一周冷个三天 170

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java怎么延时_java怎么实现延时

java实现延时的方法:1、使用Timer类Timer类负责计划任务的功能,也即指定的时间开始执行某个任务。Timer类的作用只是用于设置计划任务。Timer类的schedule方法可以按照时间计划执行程序。public static void main(String[] args) {Timer timer = new Timer();TimerTask timerTask = new MyTi...

weixin_39971172的博客 5497

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java 延时_java 延时的几种方法方法

1、 用Thread就不会iu无法终止new Thread(new Runnable() {public void run() {while (true) {test();try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}...

weixin_34280781的博客 779

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java延时_Java实现延时任务——DelayQueue

应用开发过程中,我们常常需要用到延时任务的地方,举个栗子:在我们提交订单之后,15分钟内未支付则需要自动取消订单,当然,实现的方式有很多种,我们尝试用延时任务方式进行。java里自带的延时队列——DelayQueue即可实现。什么是DelayQueueDelayQueue——延时队列,提供了在指定时间才能获取队列元素的功能。也就是说只有在队列加入元素后指定时间间隔后才能取出元素。DelayQueu...

weixin_36480510的博客 3233

JAVA延时

在Java中有时候需要使程序暂停一点时间,称为延时。普通延时用Thread.sleep(int)方法,这很简单。它将当前线程挂起指定的毫秒数。如 Java 代码复制内容到剪贴板 try{Thread.currentThread().sleep(1000);//毫秒  }catch(Exception e){} 在这里需要解释一下线程沉睡的时间。sleep()方法并不

打杂人-aerchi 2834

java异步延时

Java异步延时实现指南 作为一名刚入行的开发者,你可能会遇到需要实现异步延时的需求。在Java中,实现异步延时有多种方法,这里我将向你介绍一种使用java.util.concurrent包中的ScheduledExecutorService的实现方式。 步骤概览 以下是实现Java异步延时的步骤概览: 步骤 描述 ...

weixin_40835170的博客 334

Java两种延时——thread和timer

<br /> 在Java中有时候需要使程序暂停一点时间,称为延时。普通延时用Thread.sleep(int)方法,这很简单。它将当前线程挂起指定的毫秒数。如<br />try { Thread.currentThread().sleep(1000);//毫秒 } catch(Exception e){} <br /> <br /> <br />在这里需要解释一下线程沉睡的时间。sleep()方法并不能够让程序"严格"的沉睡指定的时间。例如当使用5000作为sleep()方法的参数时,线

技术改变生活,生活改变思想,思想改变技术。 10万+

java 延时的几种方法方法

Java 延时常见的几种方法 1、 用Thread就不会iu无法终止 new Thread(new Runnable() { public void run() { while (true) { test(); try { ...

weixin_30640769的博客 5084

java怎么延时_[Java教程]Java 延时常见的几种方法

[Java教程]Java 延时常见的几种方法02016-01-19 15:00:021、 用Thread就不会iu无法终止new Thread(new Runnable() { public void run() { while (true) { test(); try { Thread.sleep(500); ...

weixin_30872577的博客 684

Java 延时常见的几种方法

1、 用Thread就不会iu无法终止 new Thread(new Runnable() { public void run() { while (true) { test(); try { Thread.s

zhuceyouxss的博客 2436

java 循环加延时

Java循环加延时实现指南 作为一名经验丰富的开发者,我很高兴能帮助刚入行的小白学习如何在Java中实现循环加延时。下面我将通过一个简单的示例,一步步教会你如何实现这个功能。 步骤流程 首先,让我们通过一个表格来了解实现Java循环加延时的步骤: 序号 步骤 描述 1 导入所需类 导入Thread类和Inte...

weixin_41250895的博客 247
上一篇: java的线程安全与不安全
下一篇: java 的synchronized详解
qustfeng
博客等级 码龄17年 3粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值