日期:2014-05-17  浏览次数:20728 次

【求教】使用java的timer做定时删除,为什么不能一次性删除完所有数据
如题,我使用timer做定时删除,可以手动开启删除,手动关闭;也可以定时删除。如果想要删除的数据比较多的时候,启动删除功能,它总是无法一次性删除完毕,总是要等到下一次启动删除功能是才会继续删除刚才没删完的,而且有时候要这样好几次才能弄完。

我想设定的是一天自动删除一次,这样的话,会有很大的误差的吧。

这里面有什么很深奥的机制吗?

求大侠们帮忙!!!!!

以下是我Myclock.java和MyTask.java的源代码,我是通过Myclock.java中timer.schedule()调用MyTask.java,工程的总体架构是Struts+Hibernate,采用MySql数据库

Myclock.java
Java code

public class Myclock extends HttpServlet{
    public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws IOException,ServletException{
            
               String fun = request.getParameter("fun"); 
               ServletContext application=getServletContext();
               request.setAttribute("fun", fun);
               Date date=null;
               DateFormat df=new SimpleDateFormat("yyyyMMddHHmmss");
               String str="2012509161000";
               try {
                date=df.parse(str);
            } catch (ParseException e) {
                // TODO Auto-generated catch block
            e.printStackTrace();
            }
            if(fun.equals("1")){               //fun是前台JSP传递过来的值,用于判断是否是手动开启timer或关闭
              Timer timer=new Timer();
             
             [color=#FF0000] timer.schedule(new MyTask(),date,5*60*1000L);[/color]

              application.setAttribute("timer",timer);
             
                       request.getRequestDispatcher("/jsp/administer/delData.jsp").forward(request,response) ;
             }else{
              Timer timer = (Timer)application.getAttribute("timer");
            
              timer.cancel();
              application.setAttribute("timer", null);
             
              request.getRequestDispatcher("/jsp/administer/delData.jsp").forward(request,response) ;
             
             }
        }
    public void doPost(HttpServletRequest request,HttpServletResponse response)
    throws IOException,ServletException{
        doGet(request,response);
    }
    }



MyTask.java

Java code

public void run() {
        a++;
        System.out.println("***********************a==="+a+"**************************************");
        GetdateFormat time1 = new GetdateFormat();
        Timestamp time_now = time1.getDatetime();
        System.out.println("现在时间是:"+time_now+"============");
        Long oneday = 24*60*60*1000L;
        Timestamp time = new Timestamp(time_now.getTime()-oneday);
        
        List <FeedData> feedData = feedDataDao.getAllFeedDaoBeforeTime(time);
        int amount=feedData.size();
        if(amount!=0){
            for(int i=0;i<amount+1;i++){
                ;
                feedDataDao.delete(feedData.get(i));
                
                amount--;
                System.out.println("amount===="+amount);
                
                FeedData temp = feedData.get(i);
                
                
                //将删除的数据存入del_data_bck表中
                DelDataBackup del_data = new DelDataBackup();
                del_data.setFeedDatastream(temp.getFeedDatastream());
                del_data.setCvfdsdata_bck(temp.getCvfdsdata());
                del_data.setCddsdatatime_bck(temp.getCddsdatatime());
                System.out.println("del_data====="+del_data);
                delDataB