2012-01-04 10 views
-1

非常に長い操作を実行するスレッドをどうやって破壊できますか?destroy()メソッドを使わずにJavaでスレッドを破壊する方法は?

SQLクエリのタイムアウトを設定せずにこの問題を解決する必要があります。 Thread.destroy()は推奨されていません。

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class Sample { 

    public static void main(String[] args) { 
     Thread t = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        Class.forName("com.mysql.jdbc.Driver"); 
        Connection conn = DriverManager 
          .getConnection("jdbc:mysql://localhost:3306/db"); 
        conn.createStatement().execute("SELECT * FROM some_table"); 
       } catch (SQLException e) { 
        e.printStackTrace(); 
       } catch (ClassNotFoundException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
     t.start(); 
    } 

} 
+5

これを行うにはタイムアウト*を設定するのが最善の方法です*。 *なぜ*できないのですか? –

答えて

3

ジョンはタイムアウトを設定すると、問題を解決する正しい方法で、権利です。

ただし、スレッドへの参照を保持し、割り込みを発生させ、タイマとして動作しているバックグラウンドで別のスレッドを持つことができます。これは事実、自宅でのタイムアウトです!

1
+0

実際にクエリにタイムアウトを設定すると、「最良の選択」**で** –

+0

は「私はSQLクエリのタイムアウトを設定せずに、この問題を解決する必要がある」 –

+0

病気助言任意の要件は何**最良の選択を変更しません。 ** is is ...あなたの答えは正しい方法よりも優れていることを意味します。 **最高の**は非常に強力な修飾子です。 –

関連する問題