Thread
类的start()
方法如何调用实现的子类的
类?run()
方法线程
我知道当我们实现 Runnable
时,我们将子类对象传递给 Thread
类构造函数,该构造函数的参数为 Runnable
。但是另一种情况我们调用了start()
方法,当JVM在子类中没有找到start()
时,就去Thread
。现在要调用 run()
,或将其传递给 JVM,我们需要子类引用。 Thread
是如何实现的?
这是一件有趣的事情。
并发由 JVM 实现,但要让它调用子进程的 run()
,我们需要它的引用或地址。
最佳答案
Thread
实例的start()
方法不调用run()
方法。它所做的是创建一个新的操作系统线程,并安排 run()
方法在该新线程中被调用。*
与此同时,t.start()
可能会在另一个线程进入 t.run()
之前返回。
* 如何进行这些“安排”可能因操作系统而异,但通常,它涉及进行系统调用并将指针传递给操作系统将调用的 native 函数。 native 函数很可能会使用 Java Invocation API , 进入最终将调用 t.run()
的 Java 库代码。
关于java - 线程类的start()方法在实现线程类时如何调用子类的run()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790421/