线程对象名不是线程的名字
setName()常用设置线程名称
java
DrawMoneryThread t1 = new DrawMoneryThread(b1, a1, 100000);
这里的t1只是 Java 程序中对线程对象的引用变量名,用于在代码中访问该线程对象。而线程的名称是线程对象内部的一个属性,用于标识线程在 JVM 中的运行实例。
当你在线程内部调用:
java
Thread.currentThread().getName();
这行代码返回的是当前正在执行的线程实例的名称,而不是你定义的引用变量名t1。
线程名称的默认规则
如果你不显式设置线程名称,Java 会为每个线程分配一个默认名称,格式通常为:
Thread-0、Thread-1、Thread-2等(对于直接继承Thread类的线程)- 或者根据线程池或执行器的命名规则生成
显式设置线程名称
有两种常见方法可以为线程设置自定义名称:
方法 1:通过Thread构造函数设置(适用于继承Thread类的方式)
java
public class DrawMoneryThread extends Thread { public DrawMoneryThread(String name) { super(name); // 调用父类Thread的构造函数设置名称 } @Override public void run() { System.out.println("当前线程名称: " + Thread.currentThread().getName()); } } // 创建线程时指定名称 DrawMoneryThread t1 = new DrawMoneryThread("取款线程-1"); t1.start();
方法 2:通过setName()方法设置(适用于实现Runnable接口的方式)
java
public class DrawMoneryThread implements Runnable { @Override public void run() { System.out.println("当前线程名称: " + Thread.currentThread().getName()); } } // 创建线程时设置名称 DrawMoneryThread task = new DrawMoneryThread(); Thread t1 = new Thread(task, "取款线程-1"); // 通过Thread构造函数设置名称 t1.start(); // 或者创建后再设置 Thread t2 = new Thread(task); t2.setName("取款线程-2"); t2.start();
可以混用,并不一定继承了thread类的只能用构造器方法,也可以用setname方法