您的位置:首页 > 编程语言 > Java开发

Java多线程定时器任务

2018-10-17 17:16 162 查看

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累中

 

 

 

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: