黑马程序员技术交流社区
标题:
打印线程名字的问题
[打印本页]
作者:
霍明波
时间:
2012-8-22 23:39
标题:
打印线程名字的问题
class ThreadDemo
{
public static void main(String[] args)
{
ThreadTest t1 = new ThreadTest("one--");
ThreadTest t2 = new ThreadTest("two--");
t1.start();
t2.start();
for(int x=0;x<=60;x++)
{
System.out.println("main");
}
}
}
class ThreadTest extends Thread
{
private String name;
ThreadTest(String name)
{
this.name = name;
}
public void run()
{
for(int x=0;x<=60;x++)
{
System.out.println(this.getName());
}
}
}
线程有个可以打印线程名字的方法,我调用了打印的都是现成的默认名字,
而我设定的名字没有打印出来,
能告诉我是怎么回事吗?
作者:
黑马王建伟
时间:
2012-8-23 00:44
我想说,楼主疏忽了,“this.getName”应该写成“this.name”,这样就可以了
未命名.jpg
(29.02 KB, 下载次数: 7)
下载附件
2012-8-23 00:44 上传
作者:
李宁
时间:
2012-8-23 00:47
把ThreadTest的构造方法从
private String name;
ThreadTest(String name)
{
this.name = name;
}
改成这样:
ThreadTest(String name)
{
super(name);
}
线程Thread的传入自定义名字的构造方法已经定义好了,继承就好了,你又定义了一个,就把父类的方法盖掉了!!
作者:
芦曦
时间:
2012-8-23 00:49
class ThreadTest extends Thread
{
//private String name;
ThreadTest(String name)
{
super(name);//
这里直接调用父类定义好的方法就行了。其他的都不需要。
//this.name = name;
}
public void run()
{
for(int x=0;x<10;x++)
{
System.out.println(this.getName());//
这里获取线程名的方法建议写成Thread.currentThread().getName()。
}
}
}
作者:
周世阳
时间:
2012-8-23 00:49
本帖最后由 周世阳 于 2012-8-23 00:51 编辑
原因在于
class ThreadDemo
{
public static void main(String[] args)
{
ThreadTest t1 = new ThreadTest("one--");
ThreadTest t2 = new ThreadTest("two--");
t1.start();
t2.start();
for(int x=0;x<=60;x++)
{
System.out.println("main");
}
}
}
class ThreadTest extends Thread
{
private String name;
//父类中已经有name变量,你这里却覆盖了父类的name变量
ThreadTest(String name)
{
this.name = name;
}
public void run()
{
for(int x=0;x<=60;x++)
{
System.out.println(this.getName());
//getName是从父类继承的方法,返回的是父类的name,不是子类覆盖的
}
}
}
将代码修改下就可以达到你预想的效果
package com.itheima;
public class ThreadDemo
{
public static void main(String[] args)
{
ThreadTest t1 = new ThreadTest("one--");
ThreadTest t2 = new ThreadTest("two--");
t1.start();
t2.start();
for(int x=0;x<=60;x++)
{
System.out.println("main");
}
}
}
class ThreadTest extends Thread
{
//去掉覆盖的变量
ThreadTest(String name)
{
super(name);
//调用父类的构造方法
}
public void run()
{
for(int x=0;x<=60;x++)
{
System.out.println(this.getName());
}
}
}
作者:
刘芮铭
时间:
2012-8-23 00:55
class ThreadTest extends Thread
{
private String name;
ThreadTest(String name)
{
super(name); // 原程序:this.name = name; 细看程序不难发现!你使用this.name = name;
//这句话只是把这个构造方法自定义而已,
并没有传递给父类Thread的构造还是Thread(String name);
//所以你调用的还是Thread默认的名称。
只有使用super(name)方能传递给父类,才能打印你自己传递的名称!
}
public void run()
{
for(int x=0;x<=60;x++)
{
System.out.println(this.getName());
}
}
}
作者:
贾成龙
时间:
2012-8-23 00:57
继承:Thread类的线程 ,命名用Thread的一个setName()方法!
class ThreadDemo
{
public static void main(String[] args)
{
ThreadTest t1 = new ThreadTest();
ThreadTest t2 = new ThreadTest();
t1.setName("one--");
t1.start();
t2.setName("two--");
t2.start();
for(int x=0;x<=60;x++)
{
System.out.println("main");
}
}
}
class ThreadTest extends Thread
{
public void run()
{
for(int x=0;x<=60;x++)
{
System.out.println(this.getName());
}
}
}
也可以通过子类继承父类中调用,但必须在构造方法实现super(name);
代码如下:
class ThreadDemo
{
public static void main(String[] args)
{
ThreadTest t1 = new ThreadTest("one--");
ThreadTest t2 = new ThreadTest("two--");
t1.start();
t2.start();
for(int x=0;x<=60;x++)
{
System.out.println("main");
}
}
}
class ThreadTest extends Thread
{
private String name;
ThreadTest(String name)
{
super(name);
}
public void run()
{
for(int x=0;x<=60;x++)
{
System.out.println(this.getName());
}
}
}
作者:
霍明波
时间:
2012-8-23 09:27
已解决,这么多得分得 看哪个呢{:soso_e102:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2