黑马程序员技术交流社区

标题: 多线程的Thread.currentThread和this有什么区别吗? [打印本页]

作者: 杨长川    时间: 2013-3-27 09:28
标题: 多线程的Thread.currentThread和this有什么区别吗?
本帖最后由 杨长川 于 2013-3-27 13:31 编辑
  1. class Test extends Thread
  2. {
  3.       
  4.       Test(String name)
  5.       {
  6.           super(name);
  7.       }
  8.       public void run()
  9.       {
  10.           for(int x=0; x<60; x++)
  11.             {
  12.                 System.out.println((Thread.currentThread()==this)+".."+this.getName()+"run.."+x);  //Thread.currentThread()跟this在使用上有什么区别吗?
  13.             }
  14.      }
  15. }
  16. class ThreadTest  
  17. {
  18.       public static void main(String[] args)
  19.       {
  20.           Test t1 = new Test("one---");
  21.           Test t2 = new Test("two+++");

  22.   
  23.           t1.start();
  24.           t2.start();
  25.          for(int x=0; x<60; x++)
  26.         {
  27.            System.out.println("main"+x);
  28.         }
  29.     }
  30. }
复制代码
除了Thread.currentThread()是通用外还有什么区别吗?

作者: 罗胜华    时间: 2013-3-27 09:43
其实你要理解 this关键字的作用,,这样跟你说吧,this就是代表当前调用方法的一个引用
拿你上面的代码为例:
谁会执行run()方法,当然是你创建的两个对象t1和t2,那么当t1.start()的时候,this就代表t1这个对象的引用。同理:t2也一样
而thread.currentThread(),就是获取当前线程。
作者: HM谢文辉    时间: 2013-3-27 09:49
都是获得当前线程。继承Thread类获得当前线程对象可以用Thread.currentThread()和this。但实现Runnable接口来获得当前线程对象必须使用Thread.currentThread()。

作者: yufeng47    时间: 2013-3-27 11:26
HM谢文辉 发表于 2013-3-27 09:49
都是获得当前线程。继承Thread类获得当前线程对象可以用Thread.currentThread()和this。但实现Runnable接口 ...

支持该回复。
run方法有可能处于Runnable类中,Runnable接口中只有run方法一个,没有其他方法,由其他线程直接调用run方法执行任务,用this此种情况下就无法调用Thread类中的其他方法。
作者: 陈丽莉    时间: 2013-3-27 11:45
若还有问题,继续追问; 没有的话,尽量及时将帖子分类改成【已解决】~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2