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

そして、私のデータベースは無限ループでスレッドを開始してデータベースを更新するとどうなりますか?

id   b_status  
1   false 
2   false  
3   false 

であると仮定だから私の質問は、私が作成するたびに新しいスレッド私のrunメソッドが行を更新します、です。しかし、このスレッドの作成は無限ループの中にあるので、私の更新はどのように機能しますか?

データベースの更新は継続されますか?

または、最初のスレッドが最初の行を更新し、2番目が2番目に更新されますか?

答えて

0

しかし、このスレッドの作成は無限ループ内にあるので、私の 更新はどのように機能しますか?

これは更新ロジックにも適用されます。これはrun()のコードが必要です。

また、無限ループでも完了していないかもしれないが、新しいトレッドが作成され続けるため、この問題が発生します。

+0

私のメインJavaコードでは、このようなコードを使用しています:while(true){SleepThread.sleep(1000); OracleBakThread =新しいスレッド(これ)。 OracleBakThread.start();}と私のプログラムは正常に動作しています。私はここで、theradがデータベース全体を更新するか、複数のスレッドが行うかどうか、どのように動作するかを理解するために来ましたか? –

+0

したがって、更新が必要な最大時間は1秒と仮定しなければなりません。これはあなたのために働くかもしれませんが、確かに良いプログラミングスタイルはありません、なぜあなたは自分のスレッドのすべての行を更新したいのですか? – FatTony

+0

実際には、そのプロセスでメールを送信しています。データベースがfalseの場合はメールを送信し、データベースを更新します。論理的には何が起こるのでしょうか?私はtheradが1つの行を更新するかどうか、もう1つは別の行を更新するかどうかはわかりません。私はそれを明確にするためにここにいます。 –

0

なぜホイールを改造するのですか? Quartzライブラリを使用します。 他のスレッドのmy answerを参照してください。

関連する問題