看来,主线程都有一个 ID
的
1通过所示
Thread.getId():
class test{ public static boolean isMainThread(){ return Thread.currentThread().getId() == 1; } public static void main(String[]args){ System.out.println(isMainThread()); new Thread( new Runnable(){ public void run(){ System.out.println(isMainThread()); } }).start(); }}我不确定它是规范的一部分还是特定于实现的功能。
一种更可移植的方式是这样的:
class test{ static long mainThreadId = Thread.currentThread().getId(); public static boolean isMainThread(){ return Thread.currentThread().getId() == mainThreadId; } public static void main(String[]args){ System.out.println(isMainThread()); new Thread( new Runnable(){ public void run(){ System.out.println(isMainThread()); } }).start(); }}注意事项
mainThreadId必须位于主线程加载的类中(例如,包含
main方法的类)。例如,这不起作用:
class AnotherClass{ static long mainThreadId = Thread.currentThread().getId(); public static boolean isMainThread(){ return Thread.currentThread().getId() == mainThreadId; }}class test{ public static void main(String[]args){ //System.out.println(isMainThread()); new Thread( new Runnable(){ public void run(){ System.out.println(AnotherClass.isMainThread()); } }).start(); }}


