A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Thread.currentThread()与this的用法区别??
//我知道currentThread();是静态方法,说点别的!详细点谢谢~

2 个回复

倒序浏览
Thread.currentThread()是获取当前的线程。如果当前线程本身就是个Thread,那么就能直接调用isInterrupted,相当于this.isInterrupted(),this是当前线程对象。但是有时候代码并不处于一个Thread对象里。那么this就不是thread对象了,所以此时必须Thread.currentThread()获取当前线程。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
其实你是想问这个吧:Thread.currentThread().getName()和this.getName()的区别。

如下的code:

Java代码  
<span style="font-size: small;">public class Thread_getName2 extends Thread {  
    public void run() {  
        //System.out.println(getName());  
        System.out.println(currentThread().getName());  
    }  
  
    public static void main(String[] args) {  
        Thread_getName2 t = new Thread_getName2();   
        t.start();   
        t.run();     
       }  
}</span>  

  如果调用this.getName(),打印结果如下:

Java代码  
<span style="font-size: small;"> t.start(); // Thread-0  
t.run();   // Thread-0</span>  

调用currentThread().getName(),打印结果如下:

Java代码  
<span style="font-size: small;"> t.start(); // Thread-0  
t.run();   // main</span>  

以上哪种结果才是正确的呢?
应该是第二种currentThread().getName()
首先可以理解t.run()方法应该是由主线程调用的,而直接调用getName()时却打印出了Thread-0,这是不正确的。

那为什么getName()会产生这样的结果呢?
首先Thread_getName2 t = new Thread_getName2();
这个时候如果打印下t,会发现t的值为: Thread[Thread-0,5,main],这个可以看Thread类的toString()方法,


Java代码  
<span style="font-size: small;">ThreadGroup group = getThreadGroup();   
// java.lang.ThreadGroup[name=main,maxpri=10]  
  
if (group != null) {  
    return "Thread[" + getName() + "," + getPriority() + "," +   
               group.getName() + "]";  
}   
            
        </span>  


而以下两种方式是一样的

Java代码  
<span style="font-size: small;">System.out.println(getName());  
System.out.println(this.getName());  
</span>  

而this就是当前的t,所以t.run()也会打印出Thread-0。

通过以上的比较,如果要得到准确的线程的名称,必须要先调用currentThread()得到当前是哪个线程,而后调用getName()才能得出正确的结果。
如果单单只是调用getName()则会产生错误的结果。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 赞一个!下次回答记得把代码放到代码框里.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马