我被告知在主线程之外的另一个线程上运行我的所有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();
}
答案 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
。