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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 嘿~~ 中级黑马   /  2014-5-17 22:47  /  993 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 嘿~~ 于 2014-5-17 22:49 编辑

复制代码
第一个程序
  1. class ThreadClass
  2. {
  3.       public void func(){
  4.            System.out.println(getName()+":线程名字");
  5.       }
  6.       public static void main(String[] args){
  7.             new ThreadClass().func();
  8.        }
  9. }
复制代码

运行结果:Thread-0:线程名字
第二个程序只是在func()方法中的getName()前添加currentThread()或者Thread.currentThread(),打印结果就不一样了
class ThreadClass extends Thread
{
              public void func(){
               System.out.println(Thread.currentThread().getName()+":线程名字");
               }
              public static void main(String[] args)
              {
                             new ThreadClass().func();
               }
}
打印结果: main:线程名字
求高手告诉我这是为什么啊,为什么两个输出的线程不是同一个?

1 个回复

倒序浏览
       你第一个程序应该继承Thread类,忘写了。
       第一个程序中的getName()方法获取的是当前线程,即你新创建的线程 new ThreadClass()。新创建线程的名字是JVM分配的第一个线程的名字 为 Thread-0。
       第二个程序中 Thread.currentThread().getName()获取的是当前正在执行的现成的名字,由于JVM虚拟机启动时,主线程main就开始一直弄执行,优先级也是最高的,此时Thread.currentThread().getName()获取的是主线程的名字main。
       区别在与两个方法 getName() 和 Thread.currentThread().getName() 两个获取名字的方法指向的对象不同,getName() 指向新创建线程,Thread.currentThread().getName() 指向了主线程main。
       正确与否请大神们再给出解说。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马