致命的な場合はいつでもアプリケーションをシャットダウンしようとしています。 エラー/例外が発生しましたが、アプリケーションをシャットダウンする前に現在の スレッド/ mainThread.join()
run()
の中に書かれています。その例外は例外ではありません。しかし、いつでも私の doTask()
例外をスローする時間は、join()
を永遠に待っています。例外が発生したときに永遠に待機しています。
public class POC
{
public void doTask() throws Exception
{
throw new Exception("Fatal Error");
//throw new Exception("Fatal Error"); By commenting working fine.
}
public static void main(String[] args)
{
POC ob = new POC();
final Thread mainThread = Thread.currentThread();
Runtime.getRuntime().addShutdownHook(new Thread()
{
public void run()
{
try
{
System.out.println("Join() Start");
mainThread.join();
System.out.println("Join() End"); //Why this is not printing?
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
});
try
{
System.out.println("Before doTask()");
ob.doTask(); //User Defined Run()
System.out.println("After doTask()");
}
catch (Exception ex) // FATAL
{
System.err.println("Exception : " + ex.getLocalizedMessage());
System.exit(-1);
}
}
}
OutPut : 0
Before Run()
Exception : Fatal Error
Join() Start
なぜSystem.out.println("Join() End");
が印刷されないのですか?
>私に教えてください。デッドロックを解除し、強制的にjvmをシャットダウンする解決策はありますか? –