Jiv*_*ngs 5 java multithreading program-entry-point
我知道getName()主线程上的函数将返回String main,但是可以使用setName().
有没有办法总是确定应用程序的主线程?
一种可能性是Thread.currentThread()在开始时调用main(),并保持参考.
看来,主线程都有一个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();
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定它是规范的一部分还是特定于实现的功能.
这是一种更便携的方式:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
警告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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10083 次 |
| 最近记录: |