黑马程序员技术交流社区
标题:
得到的运行结果的线程名字为什不是 a 和 b
[打印本页]
作者:
NO?
时间:
2014-3-30 22:29
标题:
得到的运行结果的线程名字为什不是 a 和 b
class Teste
{
public static void main(String[] args)
{ new Thread(new NewThread("a")).start();
new Thread(new NewThread("b")).start();
for (int x=0;x<100 ;x++ )
{
System.out.println(x+" "+Thread.currentThread().getName());
}
}
}
class NewThread implements Runnable
{
private String name;
public NewThread(String name)
{
this.name=name;
}
public void run()
{
for (int x=0;x<100 ;x++ )
{
System.out.println(x+" "+Thread.currentThread().getName());
}
}
}
QQ截图20140330221913.png
(2.44 KB, 下载次数: 8)
下载附件
2014-3-30 22:26 上传
作者:
Aimer_WJY
时间:
2014-3-30 23:04
线程里面有setName()的方法,不知道你为什么要在构造函数中传一个name的值,这里不是你取个名字叫name,线程的名字就会自己改成名字的。
public class Test2 {
public static void main(String[] args)
{
Thread t1=new Thread(new NewThread("a"));
t1.setName("a");
t1.start();
Thread t2=new Thread(new NewThread("b"));
t2.setName("b");
t2.start();
for (int x=0;x<100 ;x++ )
{
System.out.println(x+" "+Thread.currentThread().getName());
}
}
}
class NewThread implements Runnable
{
private String name;
public NewThread(String name)
{
this.name=name;
}
public void run()
{
for (int x=0;x<100 ;x++ )
{
System.out.println(x+" "+Thread.currentThread().getName());
}
}
}
复制代码
作者:
ehuashao
时间:
2014-3-30 23:05
class NewThread implements Runnable
{
private String name;
public NewThread(String name)
{
this.name=name;
}
public void run()
{
for (int x=0;x<100 ;x++ )
{
System.out.println(x+" "+<u>Thread.currentThread().getName()</u>);
}
}
}
复制代码
在你自己的线程类里面,想用构造函数给线程起名字,但加下划线这句你调用的依然是系统默认的线程名称,你设置的name根本就没有使用。
要修改线程名称,就得用你的线程对象老调用setName()方法才能改线程名称,我将你的main方法修改了下,可以实现你的要求了。
public static void main(String[] args)
{ Thread t1 = new Thread(new NewThread());
Thread t2 = new Thread(new NewThread());
t1.setName("a");
t2.setName("b");
t1.start();
t2.start();
for (int x=0;x<100 ;x++ )
{
System.out.println(x+" "+Thread.currentThread().getName());
}
}
复制代码
作者:
年轻的老头
时间:
2014-3-30 23:09
应该使用这个构造函数Thread(Runnable target, String name) ,new Thread(new NewThread(),"a").start(); 同时把NewThread的构造函数去掉
作者:
yujiangjiao
时间:
2014-3-30 23:26
public static void main(String[] args)
{
Thread t1=new Thread(new NewThread("a"));//创建线程t1
Thread t2= new Thread(new NewThread("b"));//创建线程t2
t1.setName("a");//将线程Thread-0 的名字设置为“a”
t2.setName("b");//将线程Thread-1 的名字设置为“b”
t1.start();
t2.start();
for (int x=0;x<100 ;x++ )
{
System.out.println(x+" "+Thread.currentThread().getName());
}
}
复制代码
修正代码如上:
因为线程有设置名字的方法setName(),只要调用线程setName()方法就可以设置线程的名字
作者:
linweiwen
时间:
2014-3-30 23:55
楼主,直接看我的解释,
我看完了楼上所有的解释,
虽然都对,但不利于理解。
首先,你这个问题完全可以简化为两个线程,一是main方法的主线程,二是自己new的线程。
然后根据你的问题,结合自定义线程的两种方式,来看你理解有误的地方。
你在程序中,用的是implements的方式,
估计你觉得重写NewThread类的构造方法,
就能够输出你所自定义的名字。
但你要注意,
new Thread
(new NewThread("a")).start();这一句,
真正运行的线程是红色的那个,NewThread所产生的对象,
只是作为target提供run方法被调用而已。
所以,按照你原来的想法,应该用API提供的构造方法:Thread(Runnable target,String name)
程序如下:
public class Test {
public static void main(String[] args) {
Thread t1 = new Thread(new NewThread(),"A");
Thread t2 = new Thread(new NewThread(),"B");
t1.start();
t2.start();
for (int x = 0; x < 100; x++) {
System.out.println(x + " " + Thread.currentThread().getName());
}
}
}
class NewThread implements Runnable {
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(x + " " + Thread.currentThread().getName());
}
}
}
复制代码
再来说说继承Thread类的创建方式,有了上面这参考,
这个方式就相对好办了,只要在你自定义的NewThread中,
调用Thread(String name)这个构造方法重写就可以了,
程序如下:
public class Test {
public static void main(String[] args) {
NewThread A = new NewThread("A");
NewThread B = new NewThread("B");
A.start();
B.start();
for (int x = 0; x < 100; x++) {
System.out.println(x + " " + Thread.currentThread().getName());
}
}
}
class NewThread extends Thread {
public NewThread(String name){
super(name);
}
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(x + " " + Thread.currentThread().getName());
}
}
}
复制代码
只要看清楚,就不容易出错了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2