2016-12-06 2 views
0

メインスレッド以外の別のスレッドですべての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(); 
} 

答えて

1

このスレッドはRunnableオブジェクトのrunメソッドが呼び出されることを、次いで、別個のRunnable実行オブジェクトを使用して構築された場合、そうでなければ、このメソッドは何もせずに戻ります。

ので、(実際にjava.lang.Runnableの方法runの本体である)ラムダ式の本体のみが呼び出されます。これは次のものと同等です:

(new Runnable() { 

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

      } 
     } 
    }).run(); 
0

.run()の代わりに.start()に電話する必要があります。 JVMはあなたのラムダに.runを呼び出します。 Thread.runののJavadoc(より

+0

2つの違いは何ですか? – Pablo

+0

'.start'は実際にはスレッドの実行を開始させます(スレッドを生成し、そのスレッドで' .run'を呼び出すことによって非同期に実行されます)。 '.run'は同期操作です。 –

関連する問題