Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我对多个线程使用单个静态连接对象时会发生什么?_Java - Fatal编程技术网

Java 当我对多个线程使用单个静态连接对象时会发生什么?

Java 当我对多个线程使用单个静态连接对象时会发生什么?,java,Java,在我的程序中,我对多个线程使用单个静态连接对象 以下代码与DB连接有关 public static String DB_DRIVER_CLASS; public static String DB_URL; public static String DB_USERNAME; public static String DB_PASSWORD; public static Connection con; DB_DRIVER_CLASS = dbProperties.get

在我的程序中,我对多个线程使用单个静态连接对象

以下代码与DB连接有关

 public static String DB_DRIVER_CLASS;
 public static String DB_URL;
 public static String DB_USERNAME;
 public static String DB_PASSWORD;
 public static Connection con;


        DB_DRIVER_CLASS = dbProperties.getProperty("db.driverClass");
        DB_URL = dbProperties.getProperty("db.url");
        DB_USERNAME = dbProperties.getProperty("db.userName");
        DB_PASSWORD = dbProperties.getProperty("db.password");

        try {
            Class.forName(DB_DRIVER_CLASS);
            con=DriverManager.getConnection(DB_URL,DB_USERNAME,DB_PASSWORD);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
下面的代码是关于踏板的(我使用10个线程和相同的代码)

我从db中获取的任何数据都需要显示在我的JFrame UI中(如live)。因此,多个线程通过使用while循环连续执行

应用程序运行良好,没有错误

但问题是,当我从本地db(localhost)获取数据时,UI显示数据的速度很快。 当我从另一个数据库(如本地主机)获取数据时,我使用192.168.1.151表示我从另一个系统数据库获取数据。此时,UI显示数据需要更多的时间(意味着从db检索数据会延迟)

==========> 当我为不同的线程维护不同的连接对象时,从本地数据库以及192.168.1.151数据库检索数据的速度很快

在这方面,我有另一个问题,我在while循环调用方法中打开连接,并仅在该方法中关闭连接

在那个高年级,它显示在一级以下

    Apr 02, 2016 12:37:49 PM lsdu_application.Lane5 statusUpdate_lane5
     SEVERE: null
      com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The driver          was unable to create a connection due to an inability to establish the client portion of a socket.

       This is usually caused by a limit on the number of sockets imposed by   the operating system. This limit is usually configurable. 

       For Unix-based platforms, see the manual page for the 'ulimit'   command. Kernel or system reconfiguration may also be required.

        For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271).
         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
         at   sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2332)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.GeneratedConstructorAccessor9.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at lsdu_application.Lane5.statusUpdate_lane5(Lane5.java:44)
at lsdu_application.Lane5.run(Lane5.java:182)
at java.lang.Thread.run(Thread.java:745)
  Caused by: java.net.BindException: Address already in use: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:241)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
... 16 more  
TCP 127.0.0.1:3306 DESKTOP-P18FE2O:54889等待时间0

=>当我在一段时间后关闭我的应用程序时,上面的行显示“继续”,上面的行停止显示

what is the reason ?
What is the meaning of TIME_WAIT message ?

If i am not closing connection object in my application,what happens? 
but i  am closing my application directly by press (X) or ALT+F4.   

您不应该使用静态连接,而应该使用连接池(如果可能的话),请参阅,例如,静态连接有什么问题?原因是什么?“等待时间”消息的含义是什么?如果我没有关闭应用程序中的连接对象,会发生什么?但是,我正在通过按(X)或ALT+F4直接关闭我的应用程序。请给我答复。如果可能,请给我一些建议您不应该使用静态连接,而应该使用连接池。请参阅,例如,静态连接有什么问题?原因是什么?“等待时间”消息的含义是什么?如果我没有关闭应用程序中的连接对象,会发生什么?但是我将直接按(X)或ALT+F4关闭我的应用程序。请给我答复。请给我一些想法
  C:\>netstat -a -o

   Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:135            DESKTOP-P18FE2O:0      LISTENING       376
  TCP    0.0.0.0:445            DESKTOP-P18FE2O:0      LISTENING       4
  TCP    0.0.0.0:2291           DESKTOP-P18FE2O:0      LISTENING       3028
  TCP    0.0.0.0:3306           DESKTOP-P18FE2O:0      LISTENING       2540
  TCP    0.0.0.0:6646           DESKTOP-P18FE2O:0      LISTENING       3680
  TCP    0.0.0.0:8092           DESKTOP-P18FE2O:0      LISTENING       4
  TCP    0.0.0.0:49664          DESKTOP-P18FE2O:0      LISTENING       768
  TCP    0.0.0.0:49665          DESKTOP-P18FE2O:0      LISTENING       1096
  TCP    0.0.0.0:49666          DESKTOP-P18FE2O:0      LISTENING       764
  TCP    0.0.0.0:49667          DESKTOP-P18FE2O:0      LISTENING       1800
  TCP    0.0.0.0:49668          DESKTOP-P18FE2O:0      LISTENING       908
  TCP    0.0.0.0:49669          DESKTOP-P18FE2O:0      LISTENING       896
  TCP    0.0.0.0:65530          DESKTOP-P18FE2O:0      LISTENING       6992
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:50114  ESTABLISHED     2540
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54752  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54768  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54804  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54805  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54808  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54810  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54832  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54835  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54844  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54874  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54876  TIME_WAIT       0
  TCP    127.0.0.1:3306         DESKTOP-P18FE2O:54882  TIME_WAIT       0
what is the reason ?
What is the meaning of TIME_WAIT message ?

If i am not closing connection object in my application,what happens? 
but i  am closing my application directly by press (X) or ALT+F4.