如何知道线程停止或停止的时间?

时间:2014-07-09 19:13:51

标签: java database multithreading runnable executors

我有下一个代码:

Executor exe = Executors.newFixedThreadPool(20);
while (true) {
   try {
       exe.execute(new DispatcherThread(serverSocket.accept()));
       continue;
   } catch (SocketException sExcp) {
       System.exit(-1);
   } catch (Exception excp) {
       System.exit(-1);
   }
}

对于每个DispatcherThread,我创建了与数据库的连接(这意味着我有20个连接),我需要知道的是当线程停止或停止时我如何关闭与数据库的连接或完成它的流程。

2 个答案:

答案 0 :(得分:3)

你不能直接知道线程何时停止,你最接近的是Thread#isAlive方法,但是当线程中的false方法完成时它可能会返回run但是线程由于JVM无法保证,因此可能无法停止。但是,如果您的DispatcherThread类实现了Runnable接口,那么您可以在run方法的底部编写清理。

骨架代码:

class DispatcherThread implements Runnable {
    @Override
    public void run() {
        try {
            //open database connection an such...
            //...
            //handle the work here...
        } catch (...) {
            //ALWAYS handle the exceptions
        } finally {
            //cleanup tasks like close database connection
        }
    }
}

顺便说一下, Thread 后缀对于技术上不是线程的类来说不是一个好名字(因为它不会从Thread扩展)。相反,根据应该做什么给出一个正确的名称。

答案 1 :(得分:2)

您可以在run()方法的末尾关闭特定于线程的连接。

finally块会确保它发生但run()方法已退出。

class DispatcherThread extends Runnable {
    public void run() {
       ...
       try {
          ...
       }
       finally {
            // Close the connection
       }
    }