java定时任务使用多线程webservcie执行了两次这是为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java定时任务使用多线程webservcie执行了两次这是为啥?相关的知识,希望对你有一定的参考价值。

求各位大神指导下……
红色框框是一个定时任务执行的次数。定时任务刚开始执行的时候是正常的,但是执行到规定时间的时候就好像是重新初始化了一下这类。同事有两个类的定时任务在执行!

java Timer定时器是线程方式实现的。你可以把间隔时间调大点。如果操作数据库的话,可以再数据库的记录上加上标记字段,表示记录正在处理。 参考技术A 把时间调一下,然后debug看看,你的问题太笼统了,不过基本问题肯定在你代码里。追问

在本地不会出现在这种情况,只有在linux服务器的时候

追答

本地跑和服务器跑肯定是会有不同的啊, 本地只有你一个人在用, 服务器上可能有多人用, 你测过这个吗?

追问

本地服务器和linux服务器都是我一个人用的 问题已经解决了

Java多线程学习——任务定时调度

Timer

本身就是一个线程,最主要的方法就是schedule()。

schedule()的参数介绍:

技术图片

schedule(TimerTask task, long delay)  //延迟delay毫秒以后执行任务

schedule(TimerTask task, long delay, long period)  //延迟delay毫秒以后执行任务,并且每隔peroid循环执行下去

schedule(TimerTask task, Date time)  //在指定的日期time开始执行任务

schedule(TimerTask task, Date firstTime, long period)  //在指定的日期time开始执行任务,,并且每隔peroid循环执行下去

TimerTask

抽象类,实现了Runnale接口,继承它要实现run方法,run方法里面是任务的内容。

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTest 
    public static void main(String[] args) 
        Timer task = new Timer();
        Calendar startTask = new GregorianCalendar();   //创建日历类
        startTask.add(Calendar.SECOND,10);  //获取当前时间点的秒数,然后在此基础上增加10秒
        task.schedule(new MyTask(),startTask.getTime(),1000);   //任务会在当前时间点后的10秒后开始执行

    


class MyTask extends TimerTask 

    @Override
    public void run() 
        System.out.println("Hello,World");
    

有关Date/Calendar等日期类的介绍看:https://www.cnblogs.com/chiweiming/p/11178814.html

以上是关于java定时任务使用多线程webservcie执行了两次这是为啥?的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot @Scheduled多线程执行

SpringBoot几种定时任务的实现方式 和多线程执行任务

Java多线程 定时器

NodeJs多线程、多进程、定时任务

Java多线程学习——任务定时调度

《Java多线程编程核心技术》定时器Timer的使用