public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Thread(new Runnable(){
@Override
public void run() {
while(true){
System.out.println(Thread.currentThread().getName()+"---Runnable");
//System.out.println(this==Thread.currentThread());这句话会编译失败
}
}
}).start();
new Thread(){
public void run() {
while(true){
System.out.println(Thread.currentThread().getName()+"--------Thread");
System.out.println((this==Thread.currentThread())+"--------Thread");
}
};
}.start();
while(true){
System.out.println(Thread.currentThread().getName()+"--------Thread");
//System.out.println(this.getName()+"--------main");
//System.out.println(this==Thread.currentThread());这两句话同样会编译失败
}
}
}
从上面可以看出,使用Thread.currentThread().getName()和使用this.getName();都可以得到线程的名称
但是使用this有局限性。使用this调用getName();方法只有在Thread的子类中才行,在Runnable接口中或其他类中
this都不能调用,因为this代表的是所在的类,只能使用Thread.currentThread().getName()获取线程的名称。
如果编译(this==Thread.currentThread())会出现编译时异常。 |