Java多线程定时器任务

Java定时器任务---基于多线程实现的。


import com.carapi.services.inspect.InspectService;
import com.util.timer.TImer;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class TImerUtil {

        Logger logger = Logger.getLogger(TImerUtil.class);

    private Timer timer;

    private TImer abcTask;

    public void setAbcTask(TImer abcTask) {
        this.abcTask = abcTask;
    }
    /**
     * 开始定时任务
    */
   public TImerUtil(String id,String mailCode){
       Date date = getDate();
       timer = new Timer();
       timer.schedule(new TImer(timer,mailCode,id),date);
   }

    /**
     * 获取定时任日期
    * @return
     */
    public Date getDate(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY,17);
        calendar.set(Calendar.MINUTE, 43);
        calendar.set(Calendar.SECOND, 00);
        return calendar.getTime();
    }
}


 
定时器任务,在这里输入定时器开始时间,和Timer定时器所需参数

//import com.carapi.services.inspect.InspectService;
//import com.model.inspect.TCarInspect;
//import org.apache.log4j.Logger;
//
import java.io.*;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
class TImer extends TimerTask {
   Logger logger = Logger.getLogger(TImerUtil.class);
   private Timer timer;
   private String id;
   private String mailCode;


    public TImer(Timer timer,String mailCode,String id){
        this.timer = timer;
        this.id = id;
        this.mailCode = mailCode;
   }

    public void run() {

InspectService    inspectService = (InspectService)ApplicationContextUtil.getBean("inspectService");
        logger.info("邮递已送到,定时任务结束");
        timer.cancel();
            }        

        }

这里主要行业务代码,当定时器任务结束执行cancel任务,该定时器就永远不会运行,但是我在写的时候运行一个问题,就是执行@Servive层的对象时,不能回去@Service对象,因为在@Service的对象在Spring管理中,其他对象没有调用的权限,我用到是一个ApplicationContextAware这个类实现ApplicationContextAware的Bean,在String启动的时候所以Bean被初始后,将会被注入ApplicationContext的实例,inspectService是类名开头是 小写,因为类名在Sring里面name名就是小写


import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class ApplicationContextUtil implements ApplicationContextAware {


   private static ApplicationContext applicationContext;

    public static ApplicationContext getApplicationContext() {

        return applicationContext;

    }
    public void setApplicationContext(ApplicationContext applicationContext) {

        ApplicationContextUtil.applicationContext = applicationContext;

    }
    public static Object getBean(String beanName) {

        return applicationContext.getBean(beanName);
    }
}

 

 

 <!--<bean id ="ApplicationContextUtil" class ="com.util.ApplicationContextUtil" ></bean >--> 在Spring初始化中加入这个路径链接才可以让Spring初始化Bean时才会注入ApplicationContextUtil累中

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值