多线程当中this.name和Thread.currentThread.getName的区别

本文通过一个具体的Java示例,详细解释了线程名称的设定及其在不同上下文中的含义,帮助读者理解如何管理和识别多线程环境中线程的身份。

首先建立一个线程对象该线程对象用于被main线程进行调用操作:

在该线程对象当中进行this.name和Thread.currentThread.getName的值进行输出操作

//自定义一个计数对象的线程类
public class CountOperate extends Thread {
	public CountOperate() {
		System.out.println("构造函数开始执行");
		//对当前所正在执行的线程对象的名字进行输出操作
		System.out.println("Thread.currentThread.getName()="+Thread.currentThread().getName());
		System.out.println("Thread.currentThread.isAlive()="+Thread.currentThread().isAlive());
		//this.getName表示当前线程的对象名
		System.out.println("this.getName="+this.getName());
		System.out.println("this.isAlive="+this.isAlive());
		System.out.println("构造函数执行完毕");
	}
	@Override
	public void run() {
		System.out.println("run开始执行");
		System.out.println("Thread.currentThread.getName="+Thread.currentThread().getName());
		System.out.println("Thread.currentThread.isAlive()="+Thread.currentThread().isAlive());
		System.out.println("this.getName="+this.getName());
		System.out.println("this.isAlive="+this.isAlive());
		System.out.println("run执行完毕");
	}
}
定义main函数所在的类。在该类当中一共有三个不同的线程,弄清这三个线程是区别两种getName的关键:

/**
 * 
 * @author Administrator
 *在当前类当中一共涉及到三个线程对象,main函数所在的线程对象--------------main
 *				     CountOperate线程类的实例对象所在的线程-------Thread-0/count线程
 *				     t1线程t1=new Thread(count);对象所在的线程---------t1线程
 */
public class Run1 {

	public static void main(String[] args) throws InterruptedException {
		/*在new一个countOperate方法的时候main线程对象调用CountOperate类当中的构造函数,所以Thread.currentThread.getname
		 * 的值为main,即当前正在运行的线程对象
		 * Thread.currentThread.isAlive指的是当前的main线程对象依然存活
		 * this.getName则指定的是CountOperate线程类的实例化对象count对象。该对象所在的线程的名字为Thread-0是由系统所自动
		 * 分配的。count对象没有进行启动所以
		 * this.isAlive=false当前的count对象所在的线程Thread-0没有存活*/
		CountOperate count=new CountOperate();
		//将对count对象进行操作的线程对象的名字设置为count线程
		count.setName("count线程");
		/*t1线程对象和count线程对象是两个完全不同的对象,实例化一个t1线程对象,该对象实现了对count对象的绑定操作,即t1对象
		 * 依赖于count对象,二者之间的关系仅仅是t1对象会对count对象当中的某些方法进行调用操作*/
		System.out.println("");
		Thread t1=new Thread(count);
		System.out.println("t1线程开始执行");
		//为t1对象所在的线程设置name值
		t1.setName("t1线程");
		/*t1对象调用start方法的时候,该对象会自动去调用所绑定的对象(count)当中的run方法来进行执行操作,但是整个过程都是由
		 * t1线程对象来完成整个工作的,与count线程没有任何关系*/
		t1.start();
		System.out.println("t1线程执行完毕");
		t1.sleep(2000);
		
		
		System.out.println("");
		System.out.println("执行count.start开始对count线程对象进行启动:");
		/*count对象调用start方法的时候count线程才存活过来此时整个的执行过程将是由count线程所完成的。此时
		 * Thread.currentThread.getName当前正在运行的线程对象变为了count线程,之前的值为t1线程和main
		 * this.name则是指count线程。所以this.isAlive=true*/
		count.start();
	}

}
程序的运行结果:




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值