2017-08-05 8 views
0

私はGrizzly NIOに基づいたシンプルなサーバを持っています。私は次のようにそれをシャットダウン/起動、シャットダウン方法の近くにコメント何卒ご了承下さいよ:私はserver.shutdown()行が代わりに達したことはありませんので、それはすぐにシャットダウンを取得し、サーバを終了する場合並行性の過誤によりサーバが正常にシャットダウンしない

public class MyServer { 

public static void main(String[] args) { 
    try { 

     HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create("someURL"), resourceConfig, false); 
     Runtime.getRuntime().addShutdownHook(new Thread(() -> { 
      server.shutdownNow(); 
     })); 

     server.start(); 
     Thread.currentThread().join(); 
     server.shutdown(); //this line is never reached 
    } catch (IOException | InterruptedException ex) { 
     //exception handling 
    } 
} 
} 

を優雅なやり方。つまり、私はシャットダウンフックを実装しようとしましたが、どちらも呼び出されていませんでした。私は自分のjoin()実装を疑っていますが、それについてはわかりません。グレースフルシャットダウンを達成するための助けがあれば感謝します。

答えて

1

Thread.currentThread().join()は永遠にブロックされます。自分自身が終了するのを待っていますが、完了するのを待っているので終了できません。

+0

あなたはそれを処理する正しいメカニズムを提案しますか? –

+0

@johndoe私はなぜそこにそれがあるのか​​わかりません。あなたはメインで走っているので、参加する必要はありません。 –

+0

それはサーバー実装なので、私はGrizzlyのAPIを使用しています。私はそれを開始してから、正常にシャットダウンしたいと思っています。 –

関連する問題