如何在不使用destroy()方法的情况下销毁Java中的线程?

时间:2012-01-04 19:39:40

标签: java sql multithreading

如何销毁执行非常长时间操作的线程?

我需要在不设置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();
    }

}

2 个答案:

答案 0 :(得分:3)

Jon是对的,设置超时是解决问题的正确方法。

但是,您可以在后台运行另一个线程作为计时器,该计时器保存对线程的引用并触发中断。这实际上是一个本土超时!

答案 1 :(得分:1)