java - 线程类的start()方法在实现线程类时如何调用子类的run()方法

标签 java multithreading

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/

相关文章:

java - 为什么这个java程序中变量不存储值?

java - 每个问题的 JSTL

Java - Android - 如何使用 ID 以编程方式隐藏或显示控件

java - Dagger 2 多重绑定(bind)教程的@AutoAnnotation 不起作用。如何让它发挥作用?

java - 线程不会在调用 stop() 方法时停止

java - 如何使用BigInteger值来初始化字符串数组?

python - 在python中使用threading/multiprocessing同时进行多个计算

c++ - 使用多线程绘制 GDI+ 图形对象

java - java中线程的监控工具

java - 关于多线程和单例的一些事情