有没有一种方法可以更改已启动线程的名称?

3

有没有一种方法可以更改已启动的Thread的名称,或者Thread.setName(String name)仅在线程初始化块中可用?


当您尝试时发生了什么?阅读Javadoc时发生了什么? - user207421
3个回答

8

这个函数叫做setName(String name);

Thread t = new Thread(...);
t.start();
t.setName("...");

6

只要安全管理器允许,您可以在仍有对原始线程的引用的代码的任何部分中设置它。


0

线程名称可以在实例化线程对象时设置,也可以事后使用Thread.currentThread().setName进行设置。

public class NamedThreadExample implements Runnable {

  public static final String THREAD_NAME_GOES_HERE = "Original Name";
  public static final String NEW_THREAD_NAME_GOES_HERE = "New Name";

  public void run() {
    System.out.println("I am a Thread and my name is " 
                        + Thread.currentThread().getName());

    Thread.currentThread().setName(NEW_THREAD_NAME_GOES_HERE);

    System.out.println("I am a Thread and my name is " 
                        + Thread.currentThread().getName());
  }

  public static void main(String args[]) {
    (new Thread(new NamedThreadExample(), THREAD_NAME_GOES_HERE)).start();
  }
}

生成输出

I am a Thread and my name is Original Name
I am a Thread and my name is New Name

请参阅http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#Thread%28java.lang.Runnable,%20java.lang.String%29


这个答案与在线程启动后更改线程名称有什么关系? - Polygnome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接