Java 如果我给一个线程命名,但显式调用run(),会怎么样?
我知道,当我们显式调用Java 如果我给一个线程命名,但显式调用run(),会怎么样?,java,multithreading,Java,Multithreading,我知道,当我们显式调用run()时,不会启动新线程,而run()中编写的代码会在主线程上执行。但是,如果我给一个线程命名,然后像代码中所示显式地调用run(),会怎么样 public class ThreadImpl1 extends Thread{ ThreadImpl1(String name){ super(name); //start(); } public void run() { for(int i=0;i&l
run()
时,不会启动新线程,而run()
中编写的代码会在主线程上执行。但是,如果我给一个线程命名,然后像代码中所示显式地调用run()
,会怎么样
public class ThreadImpl1 extends Thread{
ThreadImpl1(String name){
super(name);
//start();
}
public void run() {
for(int i=0;i<5;i++)
System.out.println(getName());
}
public static void main(String...s) {
ThreadImpl1 t1=new ThreadImpl1("thread1");
t1.run();
for(int i=0;i<5;i++)
System.out.println(Thread.currentThread().getName());
}
}
为什么输出显示其名称,即thread1?我还没有启动线程,所以它应该一直打印“main”您不启动线程,只需像常规方法一样调用类ThreadImpl1
的run()
方法
就像您调用toString()
。。。在类上调用t1.run()时
您不启动线程,只需像常规方法一样调用类ThreadImpl1
的run()
方法
就像您调用
toString()
。。。在类上,这是因为您正在run()方法中调用getName()。这将返回您设置的字段“name”的值
您应该调用Thread.currentThread().getName()。这是因为您正在run()方法中调用getName()。这将返回您设置的字段“name”的值
您应该调用Thread.currentThread().getName()。运行方法将与普通方法一样在当前线程中执行。不会创建新线程。然后,尝试它以获得明确的答案:)运行
方法将像普通方法一样在当前线程中执行。不会创建新线程。然后,试着得到明确的答案:)它为什么要输出main?您为Thread
对象指定了thread1的名称。我在输出中预期main 10次,因为在调用t1.run()时没有创建新线程,但我忘记了run()中对getname()的调用已隐式转换为t1.getname(),其中t1是ThreadImpl1类的对象。这就是我无法理解的。为什么它要输出main?您为Thread
对象指定了thread1的名称。我在输出中预期main 10次,因为在调用t1.run()时没有创建新线程,但我忘记了run()中对getname()的调用已隐式转换为t1.getname(),其中t1是ThreadImpl1类的对象。这是我无法理解的。是的,当我在run()中使用Thread.currentThread().getName()而不是getName()时,我在输出中始终得到“main”。非常感谢。现在我得到了我所缺少的东西。是的,当我在run()中使用Thread.currentThread().getName()而不是getName()时,我总是在输出中得到“main”。非常感谢。现在我得到了我错过的东西。
thread1
thread1
thread1
thread1
thread1
main
main
main
main
main