黑马程序员技术交流社区
标题:
为什么这两个线程的名字不一样
[打印本页]
作者:
嘿~~
时间:
2014-5-17 22:47
标题:
为什么这两个线程的名字不一样
本帖最后由 嘿~~ 于 2014-5-17 22:49 编辑
复制代码
第一个程序
class ThreadClass
{
public void func(){
System.out.println(getName()+":线程名字");
}
public static void main(String[] args){
new ThreadClass().func();
}
}
复制代码
运行结果: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:线程名字
求高手告诉我这是为什么啊,为什么两个输出的线程不是同一个?
作者:
Dijkstra
时间:
2014-5-18 01:34
你第一个程序应该继承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。
正确与否请大神们再给出解说。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2