首先建立一个线程对象该线程对象用于被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();
}
}程序的运行结果:
本文通过一个具体的Java示例,详细解释了线程名称的设定及其在不同上下文中的含义,帮助读者理解如何管理和识别多线程环境中线程的身份。
319

被折叠的 条评论
为什么被折叠?



