返回顶部
首页 > 资讯 > 精选 >浅谈java定时器的发展历程
  • 380
分享到

浅谈java定时器的发展历程

java定时器ava 2023-05-30 18:05:00 380人浏览 安东尼
摘要

在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作。这时候我们就要去设置个定时器,Java中最方便、最高效的实现方式是用java.util.Timer工具类,再通过调度java.util.TimerTask任务。Time

开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作。这时候我们就要去设置个定时器,Java中最方便、最高效的实现方式是用java.util.Timer工具类,再通过调度java.util.TimerTask任务。

Timer是一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。实际上是个线程,定时调度所拥有的TimerTasks。

TimerTask是一个抽象类,它的子类由Timer安排为一次执行或重复执行的任务。实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内。

java在jdk1.3中推出了定时器类Timer,而后在jdk1.5后由DouLea从新开发出了支持多线程的ScheduleThreadPoolExecutor,从后者的表现来看,可以考虑完全替代Timer了。

Timer与ScheduleThreadPoolExecutor对比:

Timer始于jdk1.3,其原理是利用一个TimerTask数组当作队列,将所有定时任务添加到此队列里面去。然后启动一个线程,当队列为空时,此线程会阻塞,当队列里面有数据时,线程会去除一个TimerTask来判断

是否到时间需要运行此任务,如果运行时间小于或等于当前时间时则开始运行任务。由于其单线程的本质,所以会带来几个问题(详细代码在后面):

第一,当我们添加到定时器中的任务比较耗时时,由于此定时器是单线程顺序执行定时器任务,所以会影响后续任务的按时执行。

Java代码

//问题一示例: m_timer.scheduleAtFixedRate(new TaskUseLongTime(), 1000, 5000); m_timer.scheduleAtFixedRate(new TaskNORMal(), 5000, 3000);  运行结果: 14:44:29: timer is sleeping 10 seconds 14:44:39: Task Normal executed 14:44:39: timer is sleeping 10 seconds 14:44:49: Task Normal executed 14:44:49: Task Normal executed 14:44:49: timer is sleeping 10 seconds  结果分析:TaskNormal任务无法保证3秒运行一次,其只能等待TaskUseLongTime运行结束后才可以。 

--结束END--

本文标题: 浅谈java定时器的发展历程

本文链接: https://www.lsjlt.com/news/220246.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅谈java定时器的发展历程
    在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作。这时候我们就要去设置个定时器,Java中最方便、最高效的实现方式是用java.util.Timer工具类,再通过调度java.util.TimerTask任务。Time...
    99+
    2023-05-30
    java 定时器 ava
  • 谈谈PHP的发展历程和未来趋势
    随着计算机技术的快速发展,编程语言也越来越多。其中,PHP(Hypertext Preprocessor)语言作为一种开源的脚本语言,被广泛应用于Web开发中,如今已经成为最流行的服务器端编程语言之一。而今天,我们来谈一谈PHP的发展历程和...
    99+
    2023-05-14
  • 浅谈Node.js中的定时器
    Node.js中定时器的实现 上一篇博文提到,在Node中timer并不是通过新开线程来实现的,而是直接在event loop中完成。下面通过几个JavaScript的定时器示例以及Node相关源码来分析在...
    99+
    2022-06-04
    定时器 浅谈 Node
  • 浅谈Java文件被执行的历程
    目录Java的编译过程一个例子第一步第二步Java的编译过程 Java程序从源文件创建到程序运行要经过两大步骤 1、源文件由编译器编译成字节码(ByteCode) 2、字节码由ja...
    99+
    2024-04-02
  • 浅谈一下Java的线程并发
    谈到并发,必会涉及操作系统中的线程概念,线程是CPU分配的最小单位,windows系统是抢占式的,linux是轮询式的,都需要获取CPU资源。并行:同一时刻,两个线程都在执行。并发:...
    99+
    2024-04-02
  • Java并发编程之浅谈ReentrantLock
    目录一、首先看图二、lock()跟踪源码2.1 非公平锁实现2.1.1 tryAcquire(arg)2.1.2 acquireQueued(addWaiter(Node.EXCLU...
    99+
    2024-04-02
  • Discuz的来历与发展历程
    《Discuz的来历与发展历程》 Discuz(简称DZ)是一款由北京康盛新创科技有限公司开发的开源社区论坛程序,是中国最流行的社区论坛程序之一。Discuz创建于2001年,经过多年...
    99+
    2024-03-02
    论坛平台 贴子管理 社区建设 社交网络 二次开发
  • James Gosling谈Java的发展 (转)
    James Gosling谈Java的发展 (转)[@more@]James Gosling谈Java的发展XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:of...
    99+
    2023-06-03
  • 云服务器的发展历程
    云服务器(Cloud Docker)是一种基于云计算技术的服务器,它可以提供高性能、高扩展性和可管理性,适合大规模的应用和服务,如互联网服务、游戏开发、企业应用等。 以下是云服务器的发展历程: 20世纪90年代中期,互联网和电子商务的需...
    99+
    2023-10-26
    发展历程 服务器
  • 云服务器发展历程
    云服务器(Cloud Storage)是一种使用虚拟化技术将计算资源(如计算机、存储设备)分配给不同用户的服务。下面是云服务器的发展历程: OpenStack云平台:OpenStack是一个开源的虚拟化平台,它提供了一种云服务的开发方式...
    99+
    2023-10-26
    发展历程 服务器
  • 如何理解Java 8到Java 15的发展历程
    本篇内容介绍了“如何理解Java 8到Java 15的发展历程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!函数式编程(Java 8)在Ja...
    99+
    2023-06-15
  • 浅谈Java 并发的底层实现
    并发编程的目的是让程序运行更快,但是使用并发并不定会使得程序运行更快,只有当程序的并发数量达到一定的量级的时候才能体现并发编程的优势。所以谈并发编程在高并发量的时候才有意义。虽然目前还没有开发过高并发量的程序,但是学习并发是为了更好理解一些...
    99+
    2023-05-30
    java 并发 底层
  • 浅谈Java并发之同步器设计
    前言: 在 Java并发内存模型详情了解到多进程(线程)读取共享资源的时候存在竞争条件。 计算机中通过设计同步器来协调进程(线程)之间执行顺序。同步器作用就像登机安检人员一样可以协...
    99+
    2024-04-02
  • Lambda 的演变:Java 函数式编程的发展历程
    在 Java 8 之前,创建匿名内部类是实现函数式编程的主要方法。然而,这种方法冗长且难以维护。Java 8 引入了 Lambda 表达式,这是一种更简洁、更强大的匿名函数定义方式。 Lambda 表达式的引入 Lambda 表达式语法如...
    99+
    2024-04-02
  • 云服务器的发展历程简述
    云服务器(Cloud Server)是一种基于互联网的服务器,它可以通过互联网连接到客户,提供高速的网络访问和托管服务。云服务器提供的服务涵盖了数据存储、计算、应用程序开发、网络安全、管理等诸多领域。 云服务器的发展可以追溯到20世纪70...
    99+
    2023-10-26
    发展历程 服务器
  • 怎么浅谈Java并发编程中的Java内存模型
    这篇文章的内容主要围绕怎么浅谈Java并发编程中的Java内存模型进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!物理计算机并发问题在介绍Java内存...
    99+
    2023-06-17
  • 深入浅析Java中的定时器
    今天就跟大家聊聊有关深入浅析Java中的定时器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。定时器问题  定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,...
    99+
    2023-05-31
    java 定时器 ava
  • 亚马逊服务器发展历程
    1994年,亚马逊的创始人杰夫·贝索斯(Jeff Bezos)成立了亚马逊网站,旨在提供各种商品和服务,以吸引更多的消费者。贝索斯希望通过提供广泛的产品目录和其他优惠,吸引更多的客户,并在竞争激烈的市场中保持领先地位。 1998年,亚马逊...
    99+
    2023-10-27
    亚马逊 发展历程 服务器
  • 云服务器发展历程简述
    云服务器(Cloud Storage)是指一种通过互联网提供云服务的服务器,通常是用于托管在云端的数据中心里。以下是云服务器的发展历程简述: 2007年,思科推出首个商用云服务器CloudSphere X1,它基于思科交换机,提供了高度...
    99+
    2023-10-27
    发展历程 服务器
  • 浅谈Swoole并发编程的魅力
    目录场景介绍并发编程编码实现并发难题数据同步问题思维转变场景介绍 假设我们要做一个石头剪刀布的Web游戏,3个玩家同时提交竞猜后显示胜者。在传统串行化Web编程中,我们一般思路是这样...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作