2016-06-17 1 views
-1

私は、接続プール接続を使用し、約1分間実行されるdbに対してクエリを実行するスレッドを持っています。ユーザーがアプリケーションからログアウトすると1分前にこのスレッドは無限ループに入り、決して解放されません。 ユーザーがログアウトボタンをクリックしたときに、すべてのスレッドが強制終了されるようにするにはどうすればよいですか?Javaスレッドが正しくリリースされました

答えて

0

ユーザーがログアウトすると、フラグをfalseに設定します。このフラグは、先行実行を停止するスレッドによってチェックされる必要があります。

いくつかのコードを表示すると便利です。

0

スレッドを作成しているメインクラスにシャットダウンフックを追加できます。 。

はメインクラスでは、この行を追加します:ちょうどここに例を挙げ

Runtime.getRuntime()addShutdownHook(新しいMessage());

静的クラスのメッセージは、スレッドを{

 public void run() { 
      System.out.println("Bye."); 
      try { 
      // do your work here 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 
} 
0

は、まず、あなたが起動し、スレッド、スレッド自体を起動するコンポーネントを追跡する必要が伸びます。

第2に、これらを正しくシャットダウンする必要があります。ポーリング/ループするスレッドの場合、(おそらくフラグを設定することによって)それらのループを終了する必要があります。あなたはまた、割り込みでI/Oを待っている可能性のあるスレッドを割り込みし、その割り込みを適切に処理する必要があります。この頻繁に誤解された問題については、this article from Java Specialistを参照してください(基本的に、中断されたスレッドの割り込みフラグをリセットします...)

関連する問題