线程的名称:
每个都有自己的名字,jvm区分线程之间的关系也是基于线程名称作为标准,如果没有人为的去指定线程的名称则jvm会为每个线程给出默认的唯一的名字。
如果要人为的去指定线程的名称需要使用到如下的方法:
public final String getName()
【取得线程的名称】
public final void setName(String name)
【设置线程的名称】
上面是使用普通方法操作线程名字,还可以使用构造方法初始化线程的名字
public Thread(Runnable target, String name)
【可以在创建线程对象的时候指定线程的名称】
使用普通方法操作线程名称
package com.sun.test;
public class Test {
public static void main(String[] args){
//创建线程主体类对象
Runnable rn=new RunThread();
//创建了三个线程对象,这三个线程对象共享一个线程主体类对象
Thread thA=new Thread(rn);
Thread thB=new Thread(rn);
Thread thC=new Thread(rn);
//为线程设置名字
thA.setName("线程A");
thB.setName("线程B");
thC.setName("线程C");
//取得线程的名字
System.out.println(thA.getName());
System.out.println(thB.getName());
System.out.println(thC.getName());
}
}
以上的可以设置和取得线程的名字,使用的是setter和getter方法进行操作的。
还可以使用构造方法初始化线程的名字。
使用构造方法初始化线程名字
public class Test {
public static void main(String[] args){
//创建线程主体类对象
Runnable rn=new RunThread();
//创建了三个线程对象,这三个线程对象共享一个线程主体类对象
Thread thA=new Thread(rn,"线程A");
Thread thB=new Thread(rn,"线程B");
Thread thC=new Thread(rn,"线程C");
//取得线程的名字
System.out.println(thA.getName());
System.out.println(thB.getName());
System.out.println(thC.getName());
}
}
以上的所有线程都是没有启动的,如果要取得启动的线程(正在运行的线程)的名字如何操作呢?那么应该先取得正在运行的线程对象,之后再调用这个对象的getName()方法取得它的名字,关键是如何取得正在运行的线程对象呢?Thread类提供了一个方法可以轻松实现:
/**
* Returns a reference to the currently executing thread object.
* @return the currently executing thread.
*/
public static native Thread currentThread();
取得主线程的名字(therad-0)
package com.sun.thread;
public class ThreadTest {
public static void main(String[] args) {
System.out.println("主线程名称:"+Thread.currentThread().getName());
}
}
此时发现了主线程的名称就是他的方法名。那么如何取得正在运行的子线程名称呢?
取得主线程的名字是在主线程的入口方法中实现,同理要取得正在运行的子线程的名称也要在子线程的入口方法中实现,子线程的入口方法就是run()。
package com.sun.thread;
public class MyThread implements Runnable {
public MyThread() {
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
取得正在运行的子线程名称
package com.sun.test;
class RunThread implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" 启动了!");
}
}
public class Test {
public static void main(String[] args){
//创建线程主体类对象
Runnable rn=new RunThread();
//创建了三个线程对象,这三个线程对象共享一个线程主体类对象
Thread thA=new Thread(rn);
Thread thB=new Thread(rn);
Thread thC=new Thread(rn);
thA.start();
thB.start();
thC.start();
}
}
总结:
1、可以使用Thread类的setName和getName方法操作线程的名字
2、可以使用构造方法初始化线程的名字
3、如果要取得正在运行的线程的名字:
取得正在运行的线程对象的引用(Thread.currentThread())
调用对象的getName()方法即可