异步建立连接

时间:2016-12-06 14:07:06

标签: java javafx

我被告知在主线程之外的另一个线程上运行我的所有MySQL连接进程,以避免主线程被卡在需要几秒钟处理的进程上。

因此,我在一个单独的线程中建立了一个ConnectionPool,这样我的GUI就可以独立于连接的建立而启动。 然而,事实并非如此。当我运行程序时,它等待直到建立连接然后它实际上运行launch(args); 我关心的是为什么在建立新线程时它不能独立运行?

public static void main(String[] args) {
    initiateConnection();
    launch(args);
}

private static void initiateConnection() {
    new Thread(() -> {
        try {
            connection = new ConnectionPool("jdbc:mysql://127.0.0.0/comm", "root",
                    "pass");
        } catch (Exception e) {

        }
    }).run();
}

2 个答案:

答案 0 :(得分:1)

来自Thread.run()的Javadocs

  

如果使用单独的Runnable运行对象构造此线程,则调用该Runnable对象的run方法;否则,此方法无效并返回。

因此,只调用lambda表达式的主体(实际上是run的方法java.lang.Runnable的主体)。它相当于:

    (new Runnable() {

        @Override
        public void run() {
            try {
                connection = new ConnectionPool("jdbc:mysql://127.0.0.0/comm", "root",
                        "pass");
            } catch (Exception e) {

            }
        }
    }).run();

答案 1 :(得分:0)

您应该拨打.start()而不是.run()。 JVM将为您调用lambda上的.run