如果我在无限循环中启动一个线程并更新我的数据库怎么办?

时间:2016-11-10 09:02:58

标签: java multithreading

class SendMail implements Runnable { 
   Thread OracleBakThread;    
   Thread SleepThread = new  Thread(this);

   public static void main(String args[]){    
       SendMail objSendMail= new SendMail();    
       objSendMail.startInfiniteLoop();    
   }

   public void startInfiniteLoop() {   
        for(;;) {    
        SleepThread.sleep(1000);    
        OracleBakThread = new Thread(this);    
        OracleBakThread.start();}    
   }

   public void getBackupFun() {    
       dbConnectionFactory objdbConnectionFactory = new dbConnectionFactory();    
       Properties props = new Properties();    
       props.put("mail.smtp.auth", "true");    
       props.put("mail.smtp.port", "465");  
       query = "check if database is false";    

       while (rs.next()) {    
                // If database is true, Send mail, Update database    
       }         
    }    

    public void run() {    
         int minute=0;    
         Calendar calender = Calendar.getInstance();    
         minute=calender.get(Calendar.MINUTE);    

         if (minute==25) {    
             getBackupFun();      
         }   
    }                
}

假设我的数据库是

id          b_status    
1           false
2           false    
3           false

所以我的问题是,每次创建新线程时,我的run方法都会更新一行。但是由于这个线程创建在无限循环内,我的更新将如何工作?

它会继续更新我的数据库吗?

或者,第一个线程将更新第一行,第二个线程将更新第二个?

2 个答案:

答案 0 :(得分:0)

  

但是由于这个线程创建在无限循环中,我的如何   更新工作?

这取决于您的更新逻辑,为此需要run()内的代码。

此错误也会导致错误,因为无限循环将继续创建新的Tread,尽管甚至可能没有完成。

答案 1 :(得分:0)

为什么重新发明轮子?使用Quartz库。 请参阅其他主题中的my answer