问题描述
利用构造函数,给线程起名字,但是事实证明没有起到作用。线程的名字还是默认的Thread-n。publicclassTestJoin{publicstaticvoidmain(String[]args){PrimeRunrunner=newPrimeRun();Threadthread=newThread(runner,"Bumble");thread.start();}}classPrimeRunextendsThreadimplementsRunnable{publicvoidrun(){System.out.println(getName());}}
解决方案
解决方案二:
命名是成功了,你输出错了而已。classPrimeRunextendsThreadimplementsRunnable{publicvoidrun(){System.out.println(getName());}}改为classPrimeRunextendsThread{@Overridepublicvoidrun(){System.out.println(Thread.currentThread().getName());}}就行了。你原来的代码输出的是main方法里的runner的name,不是thread的name。
解决方案三:
thread.getName()试试,应该就很明显了
解决方案四:
引用楼主root1lxd的回复:
利用构造函数,给线程起名字,但是事实证明没有起到作用。线程的名字还是默认的Thread-n。publicclassTestJoin{publicstaticvoidmain(String[]args){PrimeRunrunner=newPrimeRun();Threadthread=newThread(runner,"Bumble");thread.start();}}classPrimeRunextendsThreadimplementsRunnable{publicvoidrun(){System.out.println(getName());}}
您好!感谢您的回复。这样的输出确实是Bumble。但是我还是有一些疑惑,希望您可以指点我一下。1.该run()方法在程序中,是不是有可能被别的线程调用,比如您提到的main方法。这样才导致了输出Thread-0。2.就算是main线程先调用了run方法,那么等main线程让出CPU之后,thread线程去调用,怎么没有输出呢。3.您这样修改结果是正确的,但是我不是很理解。您看能不能麻烦您帮我说下两个线程的执行过程呢。我刚开始学java,所以基础的东西还不是很熟悉。希望得到您的指导。不胜感激。
解决方案五:
引用2楼dzq584462393的回复:
thread.getName()试试,应该就很明显了
您好,谢谢您的回复。您这样修改的话,编译通不过~
解决方案六:
--你的输出结果不关线程的问题按我自己的个人理解就是首先,Thread对象执行start()方法后,会启动一个线程然后调用该Thread对象的run()方法。然后Thread类的run()方法的源码是这样的@Overridepublicvoidrun(){if(target!=null){target.run();}}这里的target是Thread类的成员变量而你的代码里PrimeRunrunner=newPrimeRun();Threadthread=newThread(runner,"Bumble");//这一句里会把runner赋值给thread的成员变量targetthread.start();//注意!!这里会启动一个线程,然后那个线程会调用thread.run()--然后自己再看下上面Thread类的run()方法的源码
解决方案七:
用这个Thread.currentThread().getName()
解决方案八:
该回复于2014-09-22 08:47:50被版主删除
解决方案九:
引用楼主root1lxd的回复:
利用构造函数,给线程起名字,但是事实证明没有起到作用。线程的名字还是默认的Thread-n。publicclassTestJoin{publicstaticvoidmain(String[]args){PrimeRunrunner=newPrimeRun();Threadthread=newThread(runner,"Bumble");thread.start();}}classPrimeRunextendsThreadimplementsRunnable{publicvoidrun(){System.out.println(getName());}}
你用的getName()是Thread的想打印你的线程的名称,使用Thread.currentThread().getName()