This post explains how Errors,
Exceptions in java are propagated between method calls before the
error stacktrace is print in console.
We can prevent Uncaught error
stacktraces getting printed in console in Thread basis or
ThreadGroup basis or all Thread basis.
public class MyMain
{
public static void main(String[] args) {
// set UncaughtExceptionHandler for all threads.
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler("default"));
// create custom ThreadGroup.
ThreadGroup tg = new MyThreadGroup("my-threadgroup");
Thread thread1 = new Thread(tg, new Runnable1());
Thread thread2 = new Thread(tg, new Runnable1());
// set UncaughtExceptionHandler specific to this thread.
thread2.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler("specific-to-thread2"));
Thread thread3 = new Thread(new Runnable1());
thread3.start();
thread2.start();
thread1.start();
throw new RuntimeException("from-Main");
}
}
class MyUncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler
{
String handlerName;
public MyUncaughtExceptionHandler(String name) {
this.handlerName = name;
}
public void uncaughtException(Thread t, Throwable e) {
System.err.println(handlerName + " Exception in thread: " + t.getName());
e.printStackTrace(System.err);
}
}
class Runnable1 implements Runnable
{
public void run() {
try {
Thread.sleep(3);
}
catch(InterruptedException e) {
}
throw new IllegalArgumentException();
}
}
class MyThreadGroup extends ThreadGroup
{
public MyThreadGroup(String groupName) {
super(groupName);
}
public void uncaughtException(Thread t, Throwable e) {
System.err.println("MyThreadGroup : Exception occurred in thread: " + t.getName());
e.printStackTrace(System.err);
}
}
Output:
default
Exception in thread: main
java.lang.RuntimeException:
from-Main
at
com.manageengine.apminsight.agent.threads.MyMain.main(MyMain.java:23)
default
Exception in thread: Thread-3
java.lang.IllegalArgumentException
at
com.manageengine.apminsight.agent.threads.Runnable1.run(MyMain.java:49)
at
java.lang.Thread.run(Thread.java:695)
specific-to-thread2
Exception in thread: Thread-2
java.lang.IllegalArgumentException
at
com.manageengine.apminsight.agent.threads.Runnable1.run(MyMain.java:49)
at
java.lang.Thread.run(Thread.java:695)
MyThreadGroup
: Exception occured in thread: Thread-1
java.lang.IllegalArgumentException
at
com.manageengine.apminsight.agent.threads.Runnable1.run(MyMain.java:49)
at
java.lang.Thread.run(Thread.java:695)
No comments :
Post a Comment