一個(gè)語句可以由不同的線程在不同的時(shí)間執(zhí)行。
Thread類靜態(tài)方法currentThread()返回調(diào)用此方法的Thread對(duì)象的引用。
考慮下面的語句:
Thread t = Thread.currentThread();
該語句將執(zhí)行上述語句的線程對(duì)象的引用分配給變量t。
下面的代碼演示了如何使用currentThread()方法。
兩個(gè)不同的線程調(diào)用CurrentThread類的run()方法中的Thread.currentThread()方法。
該程序只打印正在執(zhí)行的線程的名稱。
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); } }
上面的代碼生成以下結(jié)果。
當(dāng)你運(yùn)行一個(gè)類時(shí),JVM啟動(dòng)一個(gè)名為main的線程,它負(fù)責(zé)執(zhí)行main()方法。
我們可以處理線程中拋出的未捕獲異常。
它使用實(shí)現(xiàn)java.lang.Thread.UncaughtExceptionHandler接口的類的對(duì)象來處理。
接口被定義為Thread類中的嵌套靜態(tài)接口。
下面的代碼顯示了一個(gè)類,它可以用作線程的未捕獲異常處理程序。
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(); } }
上面的代碼生成以下結(jié)果。
更多建議: