利用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相关推荐

  1. win10计算机停止工作,360重装Win10系统后如何应对已停止工作提示的办法

    360重装Win10系统后如何应对已停止工作提示的措施的呢?最近有用户运行Win10系统频繁出现"已停止工作"错误提示,导致一些软件无法正常运行的问题.查杀也没有病毒,为何会出现此 ...

  2. Uiautomator2.0 棘手问题:系统重启后,uiautomator会停止,后面的用例全部挂掉

    Uiautomator2.0 棘手问题 Uiautomator2.0 棘手问题:系统重启后,uiautomator会停止,后面的用例全部挂掉 1. Uiautomator2.0 原理 2. 项目问题: ...

  3. 华为升级鸿蒙会有什么影响,华为“鸿蒙”启用后:华为之前的手机,可以升级成鸿蒙系统吗?...

    华为"鸿蒙"启用后:华为之前的手机,可以升级成鸿蒙系统吗? 亲短时间出现的关于鸿蒙系统有可能在今年秋天就发布的消息,让很多网友都非常期待,就像期待5G网络一样,很多网友都表示想要在 ...

  4. java线程中的task_Java线程(四):Timer和TimerTask

    Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口. Timer是一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务执 ...

  5. 启动和停止数据库——停止例程

    停止例程是使用shutdown命令来完成的,并且该命令可以带有normal,transaction,immediate,abort四个选项,默认为normal区别如下:                 ...

  6. Java培训出来后一般多少工资

    学完Java培训出来后一般多少工资呢?这是很多人都比较关心的一个问题,小编在这里告诉大家,java技术这个岗位分为初级.中级和高级,每个等级的工资情况也是不一样,来看看下面的详细介绍. Java培训出 ...

  7. java 实现接口后重写方法报错

    java 实现接口后重写方法报错 java 实现接口后重写方法报错 The method contextDestroyed(ServletContextEvent) of type InitListe ...

  8. 解决Spring的java项目打包后执行出现“无法读取方案文档...“、“原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是...”问题

    解决Spring的java项目打包后执行出现"无法读取方案文档..."."原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是..."问题 ...

  9. 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach

    一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...

最新文章

  1. C# 垃圾回收器高效工作
  2. SpringCloud Config 分布式配置
  3. select函数_SQL高级功能:窗口函数
  4. python坐标图设计_python 三维坐标图
  5. iPhone:你知道这 13 年我是怎么过的吗?
  6. sdk 今日头条_Unity接入今日头条广告(激励广告)
  7. 幼儿园计算机课程心得,幼儿主题式课程教学心得体会
  8. 倍福twincat3软件下载方式
  9. 北斗文档下载工具-百度文库文档每天免费2次机会下载
  10. ImageNet数据集编号对应的类别内容
  11. 关于域名抢注:过期高PR域名抢注价值高吗?
  12. 路由跟踪在线Tracert工具说明
  13. 解决No instances available for XXX
  14. 克拉默法则的理解记忆方法
  15. python读取tsv文件_Python读取tsv文件和evalu
  16. 利用Sharepoint里面Mysite的Shared Pictures的图片做相册 [包括创建文件夹,上传文件]...
  17. 腾讯云与智慧产业总裁汤道生:C2B是腾讯产业互联网的重要优势
  18. Python 和 Elasticsearch 构建简易搜索
  19. 嵌入式 IIC(I2C)协议
  20. 不干胶标签的印刷工艺

热门文章

  1. 四针和三针风扇 风扇调速
  2. 动态小米官网页面设计(内含最详细实现的源码)
  3. C++头文件和源文件的关系
  4. 评价最小二乘法拟合的结果
  5. 从零开始的状态机漫谈(1)——万物之始的语言
  6. 基于Springboot的动漫论坛系统(源代码+数据库+ppt文档) 040
  7. java识别不了欧元 符号_java – 使用unicode显示欧元符号并将字符更改为大写
  8. 打开Visual Studio 2017报错:未能正确加载“VSTS for Database Professionals Sql Server Data-tier Application”包
  9. STM32 SPI通信协议详细讲解—小白入门
  10. 洛谷:P1536 村村通