黑马程序员技术交流社区
标题:
多线程_04_获取线程对象以及名称
[打印本页]
作者:
Tauruszzy
时间:
2015-5-12 17:53
标题:
多线程_04_获取线程对象以及名称
代码如下:
class Test extends Thread
{
private String name;
Test(String name)
{
this.name=name;
}
public void run()
{
for(int x=0;x<60;x++)
{
System.out.println(this.getName()+"run-------"+x);
}
}
}
class ThreadTest
{
public static void main(String[] args)
{
Test t1=new Test("one");
Test t2=new Test("two");
t1.start();
t2.start();
for(int x=0;x<60;x++)
{
System.out.println("main--------"+x);
}
}
}
复制代码
运行结果如下:
E:\sourcefile>java ThreadTest
main--------0
Thread-1run-------0
Thread-0run-------0
Thread-1run-------1
main--------1
Thread-1run-------2
Thread-0run-------1
Thread-1run-------3
Thread-1run-------4
main--------2
Thread-1run-------5
Thread-0run-------2
Thread-1run-------6
main--------3
复制代码
说明:线程都有自己的默认名称,即Thread-x,x从0开始,可以在代码中用this.getName()方法获得。getName是Test从父类Thread中继承的方法。
有人说,Thread-0等名字太难看了,能否自己定义名字,答案是可以,请看下面代码:
代码一
class Test extends Thread
{
//private String name;
Test(String name)
{
//this.name=name;
super(name);
}
public void run()
{
for(int x=0;x<60;x++)
{
System.out.println(this.getName()+"run-------"+x);
}
}
}
class ThreadTest
{
public static void main(String[] args)
{
Test t1=new Test("one");
Test t2=new Test("two");
t1.start();
t2.start();
for(int x=0;x<60;x++)
{
System.out.println("main--------"+x);
}
}
}
复制代码
运行结果见下面:
E:\sourcefile>java ThreadTest
main--------0
tworun-------0
onerun-------0
tworun-------1
main--------1
tworun-------2
onerun-------1
tworun-------3
main--------2
tworun-------4
onerun-------2
tworun-------5
main--------3
tworun-------6
onerun-------3
tworun-------7
复制代码
上面代码为运行结果的部分,表明可以自定义线程的名称。
代码二
class Test extends Thread
{
//private String name;
Test(String name)
{
//this.name=name;
super(name);
}
public void run()
{
for(int x=0;x<60;x++)
{
System.out.println(Thread.currentThread().getName()+"run-------"+x);
//System.out.println(this.getName()+"run-------"+x);
}
}
}
class ThreadTest
{
public static void main(String[] args)
{
Test t1=new Test("one");
Test t2=new Test("two");
t1.start();
t2.start();
for(int x=0;x<60;x++)
{
System.out.println("main--------"+x);
}
}
}
复制代码
代码一与代码二运行结果相同,表明Thread.currentThread()==this,但是前者更为标准。
总结:
1、设置线程名称的方法:setName()方法或者构造函数。
2、每个线程在运行时都会在栈内存中分配空间,所以同一段run方法代码,在不同的线程中会有自己不同的一份。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2