Java Timetask 无缘无故停止

今天是个HAPPY的日子,困扰已久的问题已解决了,下面就切入正题。

1.现象

这个程序是一个用来获取游戏数据并组织成KPI指标数据,以彩信的形式发送给各位领导和同事。

程序主要采用Spring ,hibernate,但是定时任务使用Java Timetask ,话说这个程序是各位前辈们写的,以前业务复杂,各位前辈们写了很多有价值的代码,但随着业务的简化,也逐渐有一部分业务注释掉,到目前为止都看的我头晕。

主要问题是:每天定时任务设置为8点开始发第一波彩信,但程序和死掉一样,不执行,需要重新启动一下Tomcat服务器,才开始发送。

解决方案:

  1. 之前在网上查了很多,在网上看到这篇Blog http://www.iteye.com/problems/96620,因为我这边没有系统时间重新设置的情况,也没有抛出未检测的异常,不过还是受这篇文章的启发,想可能是TimerTask 在某个运行过程中,出现异常,造成线程阻塞了,因为正式环境比较严格,担心一不小心出现发送错误信息给客户,目前还不清楚问题出现在哪里,重点是:

    我把Java TimerTask 替换成Spring task 定时任务,问题解决了

    <!-- 配置定时任务: 秒 分 时 日 月 周 -->

    <task:scheduled-tasks>

    <!-- 确认彩信和KPI彩信任务 -->

    <task:scheduled ref="eventTableTimerTaskJob" method="runTask" cron="0 0/5 6-23 * * ?"/>

    </task:scheduled-tasks>

    今天写一个记录,希望对遇到同样问题的同学们提供一点帮助,也给自己提个醒。

时间: 2024-08-05 22:19:46

Java Timetask 无缘无故停止的相关文章

Java再学习——停止一个正在运行的线程

关于这个问题,先了解一下Thread类方法中被废弃的那些方法.suspend(), resume(),stop()/stop(Throwable obj),destroy() 首先,stop(Throwable obj)和destroy()方法在最新的Java中直接就不支持了,没必要去看了.我们只需瞧瞧suspend(), resume(), stop()这三个就行了; suspend()——让当前线程暂停执行 resume()——让当前线程恢复执行 当调用suspend()的时候,线程并没有释

java多线程之停止线程

在多线程开发中停止线程是很重要的技术点.停止线程在Java语言中并不像break语句那样干脆,需要一些技巧性的处理. 一.  异常法 采用异常法来停止一个线程,首先我们需要了解一下两个方法的用法: 1.interrupt()方法 public class MyThread extends Thread{ @Override public void run() { for (int i = 1; i <= 10000; i++) { System.out.println("i="+

java线程之停止线程

     在Java中有以下3种方法可以终止一个正在运行的线程:      1.使用退出标志,是线程正常退出,也就是run方法完成后线程终止.      2.使用stop方法强制终止线程,蛋不推荐使用这个方法,因为stop.suspend和resume一样,都是作废过期的方法.      3.使用interrupt方法中断线程,大多数停止一个线程使用Thread.interrupt()方法,但是这个方法不会终止一个正在运行的线程,还需要加入一些判断才可以完成线程的停止. 下面我就用几个例子来介绍

java如何正确停止一个线程

Thread类中有start(), stop()方法,不过stop方法已经被废弃掉. 平时其实也有用过,共享一个变量,相当于标志,不断检查标志,判断是否退出线程 如果有阻塞,需要使用Thread的interrupt()方中断阻塞,线程开始检查标志(PS:抛出异常不会退出循环) ------------------------------------------------------------我是copy分割线------------------------------------------

Java线程池停止空闲线程是否有规则呢?

Java线程池中线程的数量超过核心线程的数量,且所有线程空闲,空闲时间超过keepAliveTime,会停止超过核心线程数量的线程,那么会保留哪些线程呢?是不是有规则呢? 测试代码: ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 5, 3, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(5)); int taskNum = 13; for (int i = 0; i <

如何停止JAVA线程

如何停止JAVA线程 如何停止java的线程一直是一个困恼我们开发多线程程序的一个问题.这个问题最终在Java5的java.util.concurrent中得到了回答:使用interrupt(),让线程在run方法中停止. 简介 在Java的多线程编程中,java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume().通过这些方法,我们可以对线程进行方便的操作,但是

Java 8 停止维护,Java 9 难产,IDEA 2018 发布,还有……

祝大家五一劳动节快乐,工作顺利! 又到了总结上个月干货的时候了,这个月我们带来了各种Java技术干货,各种送书抽奖福利,各种面试题分享,各种最新动态资讯等. 5.1重磅活动 | 区块链免费送书 & 星球特价 Java 程序打日志的正确姿势 史上最全 BAT 大厂面试题整理 BAT Java面试题答案分解 Java 9 被无情抛弃,直接升级到 Java 10 高级 Java 面试通关知识点整理 Java生成随机数的几种高级用法 天了噜,Java 8 要停止维护了 Java成神之路技术干货整理 Sp

Java并发(基础知识)—— Java中断机制

上文讲解了Java线程的创建.启动以及停止,在讲到停止线程时说到了Java中断,Java中断是停止线程的一种协作机制,本文打算对Java中断机制进行详细讲解. 在网上搜索Java中断机制,发现两篇好文章,分别如下:Java 理论与实践: 处理 InterruptedException 以及 详细分析Java中断机制,推荐大家仔细阅读. 中断是一种协作机制 必须记住,中断是一种协作机制.当一个线程中断另一个线程时,被中断的线程不一定要立即停止正在做的事情.相反,中断是礼貌地请求另一个线程在它愿意并

Java线程经典面试题

53道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒.Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点. 2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并