简体   繁体   English

在Java 1.3中实现UncaughtExceptionHandler

[英]Implement UncaughtExceptionHandler in Java 1.3

How can I pass an exception that has been thrown in one thread to its calling thread? 如何将在一个线程中抛出的异常传递给它的调用线程?

I am obliged to use Java version 1.3. 我必须使用Java版本1.3。 Thread.UncaughtExceptionHandler was added in Java 1.5. 在Java 1.5中添加了Thread.UncaughtExceptionHandler

I'm quite happy if I have to wrap my code up in a try block and therefore catch the exception inside the thread that caused the exception. 如果必须将代码包装在try块中,并因此在导致异常的线程中捕获异常,我感到非常高兴。 My question is how I can pass this exception to the other thread. 我的问题是如何将这个异常传递给另一个线程。

Thanks! 谢谢!

Passing an exception to the calling thread can be done with synchronized, wait(), and notify(). 可以通过synced,wait()和notify()将异常传递给调用线程。

class MyThread extends Thread implements Runnable {
  public Throwable exception; // a copy of any exceptions are stored here

  public void run() {
    try {
      throw new Exception("This is a test");
    }
    catch (Throwable e) {
      // An exception has been thrown.  Ensure we have exclusive access to
      // the exception variable
      synchronized(this) {
        exception = e; // Store the exception
        notify();      // Tell the calling thread that exception has been updated
      }
      return;
    }

    // No exception has been thrown        
    synchronized(this) {
      // Tell the calling thread that it can stop waiting
      notify();
    }
  }
} 

MyThread t = new MyThread();




t.start();
synchronized(t) {
  try {
    System.out.println("Waiting for thread...");
    t.wait();
    System.out.println("Finished waiting for thread.");
  }
  catch (Exception e) {
    fail("wait() resulted in an exception"); 
  }
  if (t.exception != null) {
    throw t.exception;
  }
  else {
    System.out.println("Thread completed without errors");
  }
}


try {
  System.out.println("Waiting to join thread...");
  t.join();
  System.out.println("Joined the thread");
}
catch (Exception e) {
  System.out.println("Failed to join thread");
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM