为什么我从这个java程序中得到以下输出?
您好,我是java新手,目前正在学习多线程,当我运行上述程序时,我会得到这个特定的输出MyThread foo请解释原因?MyThread来自构造函数 foo来自为什么我从这个java程序中得到以下输出?,java,multithreading,Java,Multithreading,您好,我是java新手,目前正在学习多线程,当我运行上述程序时,我会得到这个特定的输出MyThread foo请解释原因?MyThread来自构造函数 foo来自run方法,该方法在调用start()时被调用 本质上,run()方法(打印baz)在main中被覆盖 而run(String s)是一个重载方法,在这里没有意义。它执行MyThread构造函数,然后执行run()方法 Thread t=new MyThread(),您试图创建一个MyThread对象,因此它执行构造函数 class M
run
方法,该方法在调用start()
时被调用
本质上,run()
方法(打印baz)在main
中被覆盖
而
run(String s)
是一个重载方法,在这里没有意义。它执行MyThread
构造函数,然后执行run()
方法
Thread t=new MyThread()
,您试图创建一个MyThread
对象,因此它执行构造函数
class MyThread extends Thread
{
MyThread()
{
System.out.print(" MyThread");
}
public void run()
{
System.out.print(" bar");
}
public void run(String s)
{
System.out.println(" baz");
}
}
public class TestThreads
{
public static void main (String [] args)
{
Thread t = new MyThread()
{
public void run()
{
System.out.println(" foo");
}
};
t.start();
}
}
然后启动线程t.start()
,它执行您在main(String[]args)
中重写的run()
方法:
首先创建
MyThread
的实例,该实例调用构造函数并打印“MyThread”。然后,调用t.start()
调用run
方法
即使您定义了打印“bar”的run
方法,它也会被main
方法(打印“foo”)中的方法覆盖
请尝试以下操作:
public void run()
{
System.out.println(" foo");
}
看看会发生什么 原因是,首先调用create对象时,构造函数
MyThread
并打印字符串的第一部分。启动线程时,继续执行run方法并打印MyThread默认构造函数中的第一个输出,它将覆盖run()
方法:Thread t = new MyThread();
t.start();
输出:
线程foo
输出:
神话读物
酒吧
请注意,第一个方法重写了
run()
方法,并在其中使用了自定义消息,但第二个方法将在MyThread类中默认重写run()
。在创建线程t
时重写run
方法。这个新的实现打印“foo”,它比您在MyThread类中实现的优先,MyThread类仍然运行它自己的打印“MyThread”的构造函数。您不期望的呢?
Thread t = new MyThread();
t.start();
Thread t = new MyThread()
{
public void run()
{
System.out.println(" foo");
}
};
Thread t = new MyThread() ;