Java线程教程 – Java当前线程
一个语句可以由不同的线程在不同的时间执行。
Thread类静态方法currentThread()返回调用此方法的Thread对象的引用。
考虑下面的语句:
Thread t = Thread.currentThread();
该语句将执行上述语句的线程对象的引用分配给变量t。
例子
下面的代码演示了如何使用currentThread()方法。
两个不同的线程调用CurrentThread类的run()方法中的Thread.currentThread()方法。
该程序只打印正在执行的线程的名称。
public class Main extends Thread { public Main(String name) { super(name); } @Override public void run() { Thread t = Thread.currentThread(); String threadName = t.getName(); System.out.println("Inside run() method: " + threadName); } public static void main(String[] args) { Main ct1 = new Main("First Thread"); Main ct2 = new Main("Second Thread"); ct1.start(); ct2.start(); Thread t = Thread.currentThread(); String threadName = t.getName(); System.out.println("Inside main() method: " + threadName); } }
上面的代码生成以下结果。
当你运行一个类时,JVM启动一个名为main的线程,它负责执行main()方法。
处理线程中未捕获的异常
我们可以处理线程中抛出的未捕获异常。
它使用实现java.lang.Thread.UncaughtExceptionHandler接口的类的对象来处理。
接口被定义为Thread类中的嵌套静态接口。
下面的代码显示了一个类,它可以用作线程的未捕获异常处理程序。
class CatchAllThreadExceptionHandler implements Thread.UncaughtExceptionHandler { public void uncaughtException(Thread t, Throwable e) { System.out.println("Caught Exception from Thread:" + t.getName()); } } public class Main { public static void main(String[] args) { CatchAllThreadExceptionHandler handler = new CatchAllThreadExceptionHandler(); // Set an uncaught exception handler for main thread Thread.currentThread().setUncaughtExceptionHandler(handler); // Throw an exception throw new RuntimeException(); } }
上面的代码生成以下结果。