浅谈java定时器的发展历程
浅谈java定时器的发展历程 Java 定时器是 Java 语言中的一种机制,用于在特定的时间或周期执行某些操作。Java 定时器的发展历程可以追溯到 JDK 1.3,自此以来,它经历了多次更新和改进。下面我们将从 Java 定时器的发展历程、 Timer 和 ScheduleThreadPoolExecutor 的比较、Timer 的问题和解决方案等方面详细介绍 Java 定时器。 Java 定时器的发展历程 Java 定时器的发展历程可以分为两个阶段:Timer 和 ScheduleThreadPoolExecutor。 1. Timer:Java 定时器的第一个阶段是 Timer,它是在 JDK 1.3 中引入的。Timer 是一个工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。实际上是个线程,定时调度所拥有的 TimerTasks。TimerTask 是一个抽象类,它的子类由 Timer安排为一次执行或重复执行的任务。实际上就是一个拥有 run 方法的类,需要定时执行的代码放到 run 方法体内。 2. ScheduleThreadPoolExecutor:Java 定时器的第二个阶段是 ScheduleThreadPoolExecutor,它是在 JDK 1.5 中引入的。ScheduleThreadPoolExecutor 是一个支持多线程的定时器,它可以代替 Timer。ScheduleThreadPoolExecutor 是一个基于线程池的调度器,它可以同时执行多个任务,避免了 Timer 的单线程问题。 Timer 和 ScheduleThreadPoolExecutor 的比较 Timer 和 ScheduleThreadPoolExecutor 都是 Java 定时器的实现方式,但它们有着不同的特点和应用场景。 1. Timer:Timer 是一个单线程的定时器,它使用一个 TimerTask 数组作为队列,将所有定时任务添加到此队列里面去。然后启动一个线程,当队列为空时,此线程会阻塞,当队列里面有数据时,线程会去除一个 TimerTask 来判断是否到时间需要运行此任务。如果运行时间小于或等于当前时间时则开始运行任务。 2. ScheduleThreadPoolExecutor:ScheduleThreadPoolExecutor 是一个支持多线程的定时器,它可以同时执行多个任务,避免了 Timer 的单线程问题。 Timer 的问题 Timer 在使用中可能会出现一些问题,以下是其中的一些: 1. 单线程问题:由于 Timer 是单线程的,所以当我们添加到定时器中的任务比较耗时时,会影响后续任务的按时执行。 2. 异常处理问题:Timer 中的线程仅仅会捕获 InterruptedException 异常,所以如果我们自定义的定时任务里面没有捕获可能出现的异常而导致异常抛出后,后面的任务无法继续运行。 3. 多个同时发生的定时任务问题:Timer 无法处理多个同时发生的定时任务,这可能会导致我们的 Timer 线程停止,从而另后续的任务无法执行。 解决方案 为了解决 Timer 的问题,我们可以使用 ScheduleThreadPoolExecutor,它可以代替 Timer,避免了单线程问题,并可以同时执行多个任务。 Java 定时器的发展历程经历了从 Timer 到 ScheduleThreadPoolExecutor 的演变。Timer 是一个单线程的定时器,ScheduleThreadPoolExecutor 是一个支持多线程的定时器。我们可以根据不同的应用场景选择合适的定时器实现方式。
- 粉丝: 2
- 资源: 878
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用NetBeans连接SQLserver2008数据库教程中文WORD版最新版本
- XPath实例中文WORD版最新版本
- XPath语法规则中文WORD版最新版本
- XPath入门教程中文WORD版最新版本
- ORACLE数据库管理系统体系结构中文WORD版最新版本
- Sybase数据库安装以及新建数据库中文WORD版最新版本
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本