如何从另一个线程强制关闭JDBC连接?

时间:2019-05-23 20:58:05

标签: java jdbc

我在Java应用程序中有两个线程。第一个线程运行JDBC连接逻辑。第二个是监听用户的命令。

    public static void main ... 

    private Connection c; // this is JDBC connection visible to both Thread 1 and 2

    Thread thread1 = new Thread(new Runnable() {
            public void run() {  
    // logic to execute SQL statements on Connection c 
    }
    ); 

    Thread thread2 = new Thread(new Runnable() {
            public void run() { 
      // Here i try to execute connection close on user's demand. 
      c.close(); 
      // this command executes with no error, 
      // but the connection doesnt close immediately. 
      // The SQL statements in thread 1 somehow waits to finish, 
      // and only then will the connection stop. 
      // How to forcefully and abruptly stop the connection ? 
    } 
); 

如何强制突然停止连接?

2 个答案:

答案 0 :(得分:2)

您可以尝试在第二个线程中调用c.close(),但是:

  • JDBC连接对象不是线程安全的 1 ,因此未指定Java端的行为。

  • AFAIK,JDBC规范没有说明如果在请求进行过程中关闭数据库连接会在数据库服务器上发生什么。尚不清楚请求是立即终止还是稍后终止(是否具有事务回滚)。

所以我的建议是不要这样做。寻找另一种方法来做您想做的事。

(如果您需要其他建议,请告诉我们您正在尝试解决的实际问题,而不是尝试解决问题的障碍。)


1-更准确地说,JDBC规范不需要它们是线程安全的。在某些驱动程序实现中,它们实际上可能(足够)是线程安全的,但是……仅在供应商文档中这样说。尽管它们似乎支持不同的模型,但从各种来源来看,至少Oracle DB和Derby支持共享逻辑JDBC连接的多个线程。

答案 1 :(得分:0)

我认为您不能这样。但是您可以强制退出整个JVM:)