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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© doudouchiyula 中级黑马   /  2016-3-31 20:56  /  856 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class TestThread {

        public static void main(String[] args) {
               
                MyThread mt = new MyThread();
                new Thread(mt).start();
                new Thread(mt).start();
                new Thread(mt).start();
                new Thread(mt).start();
        }
}
class MyThread implements Runnable {
           public void  run() {
                   for(int i = 0; i < 100; i++){
                           System.out.println(i);
                   }
                 
          }
}
程序很简单,就是想问一下,new了4个线程,4个线程的名字是一样的为什么不是同一个线程?同一个线程不能多次启动,以上程序在Eclipse中运行无误,请大师解惑。

6 个回复

倒序浏览
谁告诉你这4个线程的名字是一样的啊!!!
class MyThread implements Runnable {
    public void  run() {
            for(int i = 0; i < 100; i++){
                    System.out.println(Thread.currentThread().getName() + "..." + i);
            }
   }
}
下面的代码我改了一下,你自己在运行一次看看吧, 线程的名字是否相同不是你用眼睛看的,而是要用程序运行出来
你虽然new了4个一模一样的语句,但是每次new都是new新的对象,当然不是同一个线程而是4个线程再跑
回复 使用道具 举报
wlsperfect 发表于 2016-3-31 21:16
谁告诉你这4个线程的名字是一样的啊!!!
class MyThread implements Runnable {
    public void  run() {

Thread(String name)
          分配新的 Thread 对象。
这是Thread类的一个构造方法,我那个程序中传的名字都是mt,但是调用Thred.currentThread().getName()方法运行后,发现名字是Thread-0,Thread-1,Thread-2,Thread-3,为什么不是mt啊?
回复 使用道具 举报
你只是匿名对象引用,你把Thread.currentThread加在输出语句后面就会发现线程名字不一样了
回复 使用道具 举报
春回大地暖,寒冷的冬天渐渐地走远了,生命的精彩就是在不断的蜕变里,成长里,期待里。今天的传智没有理由拒绝成长!在不屈不挠、顽强跋涉的旅程中,每一段都有
回复 使用道具 举报
mt不是线程啊,线程也不是mt开启的,线程是new Thread开启的,mt是引用,当然不会是线程名字,new Thread开启的线程,线程名字当然取决于new Thread
回复 使用道具 举报
wlsperfect 发表于 2016-3-31 22:26
mt不是线程啊,线程也不是mt开启的,线程是new Thread开启的,mt是引用,当然不会是线程名字,new Thread开启的 ...

非常感谢,mt是应用,不是线程的名字,我给弄混淆了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马