题
输出为:RunnableA ThreadB
我不明白怎么回事??(在类B的run方法中会发生什么)
通用标签
解决方案
请仔细查看Thread类的run方法的实现,如下所示: 通用标签
因此,调用Thread的run方法将调用传递的Runnable的运行,在您的情况下,您在创建Thread t时已传递了A的实例。因此,调用super.run()会调用Thread类的run方法,而该方法又会调用A(可运行的或目标的)的run方法。
其他提示
在super.run()
中调用B#run
时,它将执行Thread#run
,然后将执行传递给构造函数的run
实例的下一个Runnable
方法。
Thread.run
只是调用您提供的run
实现的Runnable
方法。但是,您永远不要调用Thread.run
,而要调用Thread.start
。
因为您有B
的子类,并覆盖了其方法run()
。
它将首先调用B
的方法。
在B
的run()
中找到超级调用,因此它先调用super
的run()
(将执行提供的Runnable
的run()
),然后再执行B
的run()
创建类B的对象并将a传递给它时,类b的构造函数称为。B的构造函数有什么用? 超级(r); 这将r设置为超级调用。 现在主要是当您说t.run()时,它调用类B的重写方法,该方法通过说出super(r)来调用与您绑定了super的对象的run方法。因此,首先调用a的run方法,然后然后打印“ ThreadB”。
不隶属于 StackOverflow