java底层实现定时延时的途径

2023-11-13

Timer定时器:

时间间隔示意:

请添加图片描述

例子一:

public class TestTimer {
    private static Timer timer = new Timer();
    private static Logger logger = LoggerFactory.getLogger("testtimer");

    public static void main(String[] args) {
        logger.info("开始------>{}", getNow());
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                logger.info("我是延时任务------>{}", getNow());
            }
        }, 2000L, 1000L);

        //    结果:
        //    16:20:28.710 [main] INFO testtimer - 开始------>2022-02-03 04:20:28
        //16:20:30.723 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:30
        //16:20:31.722 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:31
        //16:20:32.718 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:32
        //16:20:33.723 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:33
        //16:20:34.721 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:34
        //16:20:35.722 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:35
        //16:20:36.720 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:36
        //16:20:37.718 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:37
    }

    public static String getNow() {
        Date date = new Date(System.currentTimeMillis());
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return dateFormat.format(date);
    }
}

例子二:

public class TestTimer {
    private static Timer timer = new Timer();
    private static Logger logger = LoggerFactory.getLogger("testtimer");
    private static Integer time = 0;

    public static void main(String[] args) {
        logger.info("开始------>{}", getNow());
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                time++;
                logger.info(time + "号延时任务开始------>{}", getNow());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                logger.info(time + "号延时任务结束------>{}", getNow());
            }
        }, 2000L, 2000L);

        //    结果:
        //    16:25:24.854 [main] INFO testtimer - 开始------>2022-02-03 04:25:24
        //16:25:26.882 [Timer-0] INFO testtimer - 1号延时任务开始------>2022-02-03 04:25:26
        //16:25:27.894 [Timer-0] INFO testtimer - 1号延时任务结束------>2022-02-03 04:25:27
        //16:25:28.881 [Timer-0] INFO testtimer - 2号延时任务开始------>2022-02-03 04:25:28
        //16:25:29.887 [Timer-0] INFO testtimer - 2号延时任务结束------>2022-02-03 04:25:29
        //16:25:30.881 [Timer-0] INFO testtimer - 3号延时任务开始------>2022-02-03 04:25:30
        //16:25:31.886 [Timer-0] INFO testtimer - 3号延时任务结束------>2022-02-03 04:25:31
        //16:25:32.880 [Timer-0] INFO testtimer - 4号延时任务开始------>2022-02-03 04:25:32
        //16:25:33.887 [Timer-0] INFO testtimer - 4号延时任务结束------>2022-02-03 04:25:33
        //16:25:34.877 [Timer-0] INFO testtimer - 5号延时任务开始------>2022-02-03 04:25:34
        //16:25:35.884 [Timer-0] INFO testtimer - 5号延时任务结束------>2022-02-03 04:25:35
        //16:25:36.881 [Timer-0] INFO testtimer - 6号延时任务开始------>2022-02-03 04:25:36
        //16:25:37.887 [Timer-0] INFO testtimer - 6号延时任务结束------>2022-02-03 04:25:37
    }

    public static String getNow() {
        Date date = new Date(System.currentTimeMillis());
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return dateFormat.format(date);
    }
}

Thread.sleep():

/**
 * Causes the currently executing thread to sleep (temporarily cease
 * execution) for the specified number of milliseconds, subject to
 * the precision and accuracy of system timers and schedulers. The thread
 * does not lose ownership of any monitors.
 *
 * @param  millis
 *         the length of time to sleep in milliseconds
 *
 * @throws  IllegalArgumentException
 *          if the value of {@code millis} is negative
 *
 * @throws  InterruptedException
 *          if any thread has interrupted the current thread. The
 *          <i>interrupted status</i> of the current thread is
 *          cleared when this exception is thrown.
 */
public static native void sleep(long millis) throws InterruptedException;

上面的定时任务已经用到了,入参是毫秒数,当前线程沉睡的毫秒数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java底层实现定时延时的途径 的相关文章

  • Android PhoneGap 插件,UI 选项卡栏,调整 WebView 大小

    我正在创建一个美味的 PhoneGap 插件 希望一旦它能被打开 准备好了 插件基本完成了 我只需要一个漂亮的用户界面 相互作用 简而言之 我想创建一个 本机 android 工具栏组件 如果您实现 PhoneGap UIControls
  • Maven 2:如何将当前项目版本打包在WAR文件中?

    我正在使用 Maven 2 构建我的 Java 项目 并且正在寻找一种向用户呈现 pom xml 当前版本号的方法 例如使用 Servlet 或 JSP 据我所知 最好的方法是 Maven 将版本号作为文本文件打包到 WAR 中 这使我能够
  • 具有默认值的 Java JAX-RS 自定义参数

    假设我有这个 这只是一个示例 GET Path value address Produces application json public Response getAddress QueryParam user User user 用户是
  • 我在socket上设置了超时,发现这个值不能大于21

    我在socket上设置了超时 该值小于21秒才有效 21秒后发现超时还是21秒 public static void main String args SimpleDateFormat sdf new SimpleDateFormat yy
  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • Google App Engine with Java - 运行 javac.exe 编译器时出错

    在 Windows XP 上 刚刚下载并解压谷歌应用程序引擎java sdk to C Program Files appengine java sdk 我已经安装了jdk C Program Files Java jdk1 6 0 20
  • 无法使用 json 架构验证器根据预定义的 yaml 文件验证查询参数

    我需要根据预定义的 yaml 文件架构验证查询参数的架构 因此我使用 json 架构验证器 验证如何失败 我正在执行以下步骤 填充参数和相应的架构 final List
  • 如何拦截 REST 端点以接收所有标头?

    我当前的代码是 Path login RequestScoped public class LoginResource GET SecurityChecked public Response getUser HeaderParam AUTH
  • JTable 和 JScrollpane 大小的问题

    我有一个JScrollPane with a JTable在里面 在里面JTable我最初有 3 行 稍后添加行 默认JTable我的 3 行很难看 因为JScrollPane calls getPreferredScrollableVie
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 线程“main”中的异常 java.lang.StackOverflowError

    我有一段代码 但我无法弄清楚为什么它在线程 main java lang StackOverflowError 中给出异常 这是问题 Given a positive integer n prints out the sum of the
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • 创建正则表达式匹配数组

    在Java中 我试图将所有正则表达式匹配返回到一个数组 但似乎您只能检查模式是否匹配某些内容 布尔值 如何使用正则表达式匹配来形成与给定字符串中的正则表达式匹配的所有字符串的数组 4城堡的回答 https stackoverflow com
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • 为什么我的代码会产生错误:该语句没有返回结果集[重复]

    这个问题在这里已经有答案了 我正在从 Microsoft SQL Server Studio 执行以下查询 该查询工作正常并显示结果 SELECT INTO temp table FROM md criteria join WHERE us
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分

随机推荐

  • MySQL数据库定时备份脚本

    bin bash 定义备份用户 密码 DbUser root DbPasswd NTQ12377 定义备份数据库 DbName zabbix jumpserver openfire n9e n9e v5 ibex 定义备份目录 Path d
  • 手把手带你编写微信公众号

    这是一个简单的项目 简单编写微信公众号 扫码关注 关注 即可提高学习效率 Peace 实时查询城市天气 回复 美女视频网站 观看美女视频 不定时推送小姐姐视频和图片合集 Docker线上部署SpringBoot 如果您不知道如何开始编写的话
  • ajax中设置contentType: “application/json”的作用

    最近在做项目交互的时候 刚开始向后台传递数据返回415 后来百度添加了 contentType application json 之后返回400 然后把传输的数据格式改为json字符串就传输成功了 现在我们来看看 contentType a
  • Keras-训练网络时的问题:loss一直为nan,accuracy一直为一个固定的数

    目录 问题描述 问题的解决 调整学习率后解决问题 其他可能导致此问题的原因 1 2 3 4 关于如何选择学习率 问题描述 在使用VGG19做分类任务时 遇到一个问题 loss一直为nan accuracy一直为一个固定的数 如下输出所示 即
  • ESP32-C3入门教程 网络 篇(三、 MQTT 协议基础介绍及测试)

    在前面 我们已经学会了 ESP32 C3 的WiFi 配置以及使用 为我们学习网络协议建立了基础 这篇文章我们就来学习测试一下ESP32 C3 的 MQTT 驱动 目录 前言 1 基础介绍 1 1 MQTT协议基本概念 1 2 ESP MQ
  • c#实现循环输入商品编号和购买数量,结账时应付金额并找零

    循环输入商品编号和购买数量 系统自动计算每种商品的价钱 单价X数量 并累加总金额 当输入n时结账 假设享受8折优惠 结账时 根据折扣计算应付金额 输入实付金额 并找零 下面展示一些 内联代码片 使用c 实现 代码如下 An highligh
  • 【数据压缩3】AVI文件格式分析及问题回答+WAV文件格式分析

    目录 AVI文件问题回答 1 AVI文件音频和视频的数据是如何放置的 交织放置还是连续放置 2 AVI文件一个视频帧大约占据多少字节 一个音频数据块大约占用多少字节 WAV文件格式分析 文件概述 文件格式 RIFF区块 FORMAT区块 D
  • 数据结构——根据后序遍历结果和中序遍历结果画出二叉树

    根据二叉树的中序和后序遍历结果画出二叉树 1 首先根据后序遍历结果判断根节点 最右边的元素 2 在中序遍历结果中找到该根节点 该节点的左边为根节点的左子树 节点右边为根节点的右子树 3 回到后序遍历中找点左子树在后序遍历中最右边的元素即为左
  • FPGA学习方向规划

    前言 仅以本帖 记录自己的学习历程及未来的方向 刚入职做FPGA研发1年 也不知道自己的发展方向 所以 从FPGA接口通信入手 慢慢学习和了解吧 希望自己逐步积累和掌握以下几个方向从业的基础知识 并具有一定的研发能力 主要方向分以下个方向
  • Binning模式缩小分辨率

    示例 640 480 NV12图像 提取Y部分数据 将Y数据做降采样 隔行隔列取值 保存成文件 include
  • React + antd实现嵌套可增减表单

    技术栈 React antd 接到需求 做一个form嵌套表单 刚开始想自己做一个 后来想着参数处理可能比较麻烦就直接用antd的Form吧 一 目标效果 先看一下效果图 其中点击新增标签及配置时可以加一个红色框里的内容 点击蓝框里的加号可
  • 将 VEDAI 遥感图像数据集转为 PASCAL VOC 格式

    PASCAL VOC 格式的 VEDAI 数据集 只有JPEGImages和Annotations 地址 所需积分 C币 0 VEDAI 数据集共有11类 类别和所对应的 label 如下表所示 类别 car truck tractor c
  • 使用python抓取天涯帖子,并实现“只看楼主”功能

    使用python抓取天涯帖子 并实现 只看楼主 功能 在看天涯论坛时 有些帖子很有价值 想把它保存下来 可是好的帖子动辄几百页 其中又掺杂了很多灌水和撕逼 所以我编写了一个python小程序 将一个帖子中楼主所发的内容抓取下来 挺好用的 唯
  • TypeScript入门总结

    一 类型注解 如 number是类型注解 具体分为 原始类型 数组类型2 联合类型 类型别名type 交叉 keyof 获取key字面量 函数类型2 void不确定函数返回值 可选参数 不确定参数 对象类型 字面量类型 类似const 接口
  • Linux文件误删除恢复操作

    本文参考http write blog csdn net postedit ticket ST 491405 OGjDDusZeyMgVQ7bHW7f passport csdn net 前言 作为一个多用户 多任务的操作系统 Linux下
  • 将mysql中的数据移到另一个数据库中

    1 导出整个数据库 mysqldump u 用户名 p 数据库名 gt 导出的文件名 mysqldump u admin p vmiplatform gt sql sql 运行结果如下 2 导出一个表 mysqldump u 用户名 p 数
  • 解决node里面的中文乱码

    今天咋学习node的时候 跟着视频里在撸代码 但是却出现了中文乱码的情况 视频中的谷歌浏览器可能和我的版本不一致 先看代码吧 use strict const http require http let count 0 const serv
  • linux系统中文件名通配符的使用方法

    linux系统中文件名通配符的使用方法 常用的四种 匹配任意字符 匹配任意单个字符 指定范围的匹配 e g a z 0 9 a zA Z 不匹配通配符内的信息 e g a Z
  • 继承的详解

    继承 继承基础 继承方式 继承中的对象模型 继承中构造和析构顺序 继承同名成员处理方式 继承同名静态成员处理方式 多继承语法 菱形继承 继承基础 继承得好处 减少重复代码 语法 class 子类 继承方式 父类 子类也称为 派生类 父类也称
  • java底层实现定时延时的途径

    Timer定时器 时间间隔示意 例子一 public class TestTimer private static Timer timer new Timer private static Logger logger LoggerFacto