2016-11-10 2 views
-2
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();  
     } 
    }     
} 

Und wenn meine Datenbank istWas passiert, wenn ich einen Thread in der Endlosschleife starte und meine Datenbank aktualisiere?

id   b_status  
1   false 
2   false  
3   false 

Also meine Frage ist, eine Zeile aktualisiert wird jedes Mal, wenn ich einen neuen Thread meine run-Methode erstellen. Da diese Thread-Erstellung jedoch innerhalb einer Endlosschleife erfolgt, wie funktioniert mein Update?

Wird es weiterhin meine Datenbank aktualisieren?

Oder der erste Thread wird die erste Zeile aktualisieren, die zweite wird die zweite aktualisieren?

Antwort

0

Aber wie diese Thread-Erstellung innerhalb einer Endlosschleife ist, wie funktioniert meine Aktualisierung?

Dies hängt von Ihrer Update-Logik ab, dafür wird der Code innerhalb run() benötigt.

Auch dieses Problem wird zu Fehlern führen, da die Endlosschleife weiterhin neue Treads erstellt, obwohl diese möglicherweise nicht fertig sind.

+0

in meinem Haupt-Java-Code verwende ich einen Code wie folgt: while (true) {SleepThread.sleep (1000); OracleBakThread = neuer Thread (this); OracleBakThread.start();} und mein Programm funktioniert gut. Ich bin hier, um zu verstehen, wie es funktioniert, ob ein Therad die ganze Datenbank aktualisiert oder mehrere Threads tun werden? –

+0

Sie müssen also davon ausgehen, dass die maximale Zeit, die jedes Update benötigt, 1 Sekunde beträgt. Das könnte für Sie funktionieren, aber es ist definitiv kein guter Programmierstil, warum möchten Sie sogar jede Zeile in einem eigenen Thread aktualisieren? – FatTony

+0

Eigentlich sende ich eine Mail in diesem Prozess, wenn die Datenbank falsch ist, dann sende eine Mail und aktualisiere meine Datenbank. aber logisch, was wird passieren? Ich weiß nicht, ob ein Therad eine Zeile aktualisiert, ein anderes wird eine andere Zeile aktualisieren. Ich bin hier, um das zu klären. –

0

Warum das Rad neu erfinden? Verwenden Sie die Quartz-Bibliothek. Siehe in anderen Thread my answer.

Verwandte Themen