线程的名称

本文介绍了Java中线程名称的相关知识,包括如何使用`setName`和`getName`方法以及构造函数来设定和获取线程名称。同时,讲解了如何在运行时获取主线程和子线程的名称,主要通过`Thread.currentThread().getName()`实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程的名称:

每个都有自己的名字,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()方法即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值