java 根据名称 线程_如何正确获取Java中的线程名称?

我有用于在Java中创建线程的此类

package org.vdzundza.forms;

import java.awt.Graphics;

import java.awt.Graphics2D;

public class DrawThread extends Thread {

private static final int THREAD_SLEEP = 500;

public CustomShape shape;

private Graphics g;

public DrawThread(CustomShape shape, Graphics g) {

this.shape = shape;

this.g = g;

}

@Override

public void run() {

while (true) {

try {

Thread.sleep(THREAD_SLEEP);

Graphics2D g2d = (Graphics2D) g;

g2d.setColor(this.shape.getColor());

g2d.fill(this.shape.getShape());

System.out.println(String.format("execute thread: %s %s",

Thread.currentThread().getName(), this.getName()));

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

控制台显示以下文本作为输出

execute thread: red rectangle Thread-2

execute thread: yellow ellipse Thread-3

我的代码创建了新线程:

customShapes[0] = new CustomShape(

new Rectangle2D.Float(10, 10, 50, 50), Color.RED,

"red rectangle");

customShapes[1] = new CustomShape(new Ellipse2D.Float(70, 70, 50, 50),

Color.YELLOW, "yellow ellipse");

for (CustomShape cshape: customShapes) {

Thread t = new Thread(new DrawThread(cshape, this.getGraphics()),

cshape.getName());

threads.add(t);

t.start();

}

我的问题是:为什么Thread.currentThread().getName()返回正确的线程名却this.getName()返回另一个?

你可能感兴趣的:(java,根据名称,线程)