1

我有下一个代码:

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 个连接),我需要知道的是如何在线程停止或它停止或完成其流程时关闭与数据库的连接。

4

2 回答 2

4

您无法直接知道线程何时停止,您拥有的最接近的是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)。取而代之的是,根据应该做什么来给一个合适的名字。

于 2014-07-09T19:16:49.570 回答
2

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

一个finally块将确保它发生,但是 run() 方法退出了。

class DispatcherThread extends Runnable {
    public void run() {
       ...
       try {
          ...
       }
       finally {
            // Close the connection
       }
    }
于 2014-07-09T19:16:41.940 回答