Похоже, что основной поток имеет 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();
}
}