Java: Timer启用后无法停止?如何停止Timer
利用Timer和TimerTask可以实现定时完成某些任务。
但是在运行过程中出现了很奇怪的现象:
所有TimerTask都完成了,按理说线程应该自动退出,但是它却没有!
在JDK1.5的文档Timer类中,有这样一句话:
“对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。”
但是这个“很长时间”是多长呢?一直等也没见它停止。。。
既然会成为垃圾回收的对象,那么我们就主动让系统回收一下吧。在每个TimerTask的run()方法最后加上一行代码:
System.gc();
然后再运行程序,搞定,正常了。
很自然会想到应该保证在Timer的最后一个TimerTask的最后调用gc(),但是经尝试发现只要在某一个TimerTask中调用过gc(),然后程序就能正常结束。并且gc()也不必放在最后
package tmp;import java.util.Date;
import java.util.TimerTask;/*** Created by Gracecoder on 2017/11/28.*/
public class MyTask extends TimerTask {@Overridepublic void run() {System.out.println("任务执行了,时间为" + new Date());
// cancel();System.gc();}
}
package tmp;import java.util.Calendar;
import java.util.Date;
import java.util.Timer;/*** Created by Gracecoder on 2017/11/28.*/
public class Test1 {public static void main(String[] args){System.out.println("当前时间为:" + new Date());Calendar calendarRef = Calendar.getInstance();calendarRef.add(Calendar.SECOND,10);Date runDate = calendarRef.getTime();MyTask task = new MyTask();
// Timer timer = new Timer(true);
//如果设为demon线程,那可能demon线程还没执行操作,虚拟机就已经退出了,进程结束了!那是因为JRE只根据前台线程是否还在执行来判断程序是否结束而不管后台线程。Timer timer = new Timer();timer.schedule(task,runDate);}
}
Java: Timer启用后无法停止?如何停止Timer相关推荐
- win10计算机停止工作,360重装Win10系统后如何应对已停止工作提示的办法
360重装Win10系统后如何应对已停止工作提示的措施的呢?最近有用户运行Win10系统频繁出现"已停止工作"错误提示,导致一些软件无法正常运行的问题.查杀也没有病毒,为何会出现此 ...
- Uiautomator2.0 棘手问题:系统重启后,uiautomator会停止,后面的用例全部挂掉
Uiautomator2.0 棘手问题 Uiautomator2.0 棘手问题:系统重启后,uiautomator会停止,后面的用例全部挂掉 1. Uiautomator2.0 原理 2. 项目问题: ...
- 华为升级鸿蒙会有什么影响,华为“鸿蒙”启用后:华为之前的手机,可以升级成鸿蒙系统吗?...
华为"鸿蒙"启用后:华为之前的手机,可以升级成鸿蒙系统吗? 亲短时间出现的关于鸿蒙系统有可能在今年秋天就发布的消息,让很多网友都非常期待,就像期待5G网络一样,很多网友都表示想要在 ...
- java线程中的task_Java线程(四):Timer和TimerTask
Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口. Timer是一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务执 ...
- 启动和停止数据库——停止例程
停止例程是使用shutdown命令来完成的,并且该命令可以带有normal,transaction,immediate,abort四个选项,默认为normal区别如下: ...
- Java培训出来后一般多少工资
学完Java培训出来后一般多少工资呢?这是很多人都比较关心的一个问题,小编在这里告诉大家,java技术这个岗位分为初级.中级和高级,每个等级的工资情况也是不一样,来看看下面的详细介绍. Java培训出 ...
- java 实现接口后重写方法报错
java 实现接口后重写方法报错 java 实现接口后重写方法报错 The method contextDestroyed(ServletContextEvent) of type InitListe ...
- 解决Spring的java项目打包后执行出现“无法读取方案文档...“、“原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是...”问题
解决Spring的java项目打包后执行出现"无法读取方案文档..."."原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是..."问题 ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach
一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...
最新文章
- C# 垃圾回收器高效工作
- SpringCloud Config 分布式配置
- select函数_SQL高级功能:窗口函数
- python坐标图设计_python 三维坐标图
- iPhone:你知道这 13 年我是怎么过的吗?
- sdk 今日头条_Unity接入今日头条广告(激励广告)
- 幼儿园计算机课程心得,幼儿主题式课程教学心得体会
- 倍福twincat3软件下载方式
- 北斗文档下载工具-百度文库文档每天免费2次机会下载
- ImageNet数据集编号对应的类别内容
- 关于域名抢注:过期高PR域名抢注价值高吗?
- 路由跟踪在线Tracert工具说明
- 解决No instances available for XXX
- 克拉默法则的理解记忆方法
- python读取tsv文件_Python读取tsv文件和evalu
- 利用Sharepoint里面Mysite的Shared Pictures的图片做相册 [包括创建文件夹,上传文件]...
- 腾讯云与智慧产业总裁汤道生:C2B是腾讯产业互联网的重要优势
- Python 和 Elasticsearch 构建简易搜索
- 嵌入式 IIC(I2C)协议
- 不干胶标签的印刷工艺
热门文章
- 四针和三针风扇 风扇调速
- 动态小米官网页面设计(内含最详细实现的源码)
- C++头文件和源文件的关系
- 评价最小二乘法拟合的结果
- 从零开始的状态机漫谈(1)——万物之始的语言
- 基于Springboot的动漫论坛系统(源代码+数据库+ppt文档) 040
- java识别不了欧元 符号_java – 使用unicode显示欧元符号并将字符更改为大写
- 打开Visual Studio 2017报错:未能正确加载“VSTS for Database Professionals Sql Server Data-tier Application”包
- STM32 SPI通信协议详细讲解—小白入门
- 洛谷:P1536 村村通