Java 为什么用户编写的run方法()会启动一个新线程?
我知道您可以通过实现Java 为什么用户编写的run方法()会启动一个新线程?,java,multithreading,Java,Multithreading,我知道您可以通过实现Runnable接口或扩展thread类来启动线程。为了实现Runnable接口,我被告知,我只需使用run()方法创建一个类,在该方法中,我可以在线程中放入我想要运行的任何代码 我的困惑是: run()方法的主体只是特定于用户的应用程序代码。那么Java实际上是如何启动线程的呢?换句话说,实际启动线程的代码在哪里?我还没有看到Runnable接口(不知道在哪里可以找到它),但是因为它只是一个接口,所以它只能拥有静态变量和方法签名。不是吗?来自: 当使用实现接口Runnabl
Runnable
接口或扩展thread
类来启动线程。为了实现Runnable
接口,我被告知,我只需使用run()
方法创建一个类,在该方法中,我可以在线程中放入我想要运行的任何代码
我的困惑是:
run()
方法的主体只是特定于用户的应用程序代码。那么Java实际上是如何启动线程的呢?换句话说,实际启动线程的代码在哪里?我还没有看到Runnable
接口(不知道在哪里可以找到它),但是因为它只是一个接口,所以它只能拥有静态变量和方法签名。不是吗?来自:
当使用实现接口Runnable的对象创建
线程,启动线程会导致对象的run方法
在单独执行的线程中调用
Java创建一个新线程,该线程在启动run()
方法时执行放入该方法的代码
您需要将runnable作为参数传递给线程的构造函数:
Thread t = new Thread(new ObjectThatImplementsRunnable());
t.start();
从以下文件的javadoc:
使该线程开始执行;Java虚拟机调用
此线程的run方法
从:
当使用实现接口Runnable的对象创建
线程,启动线程会导致对象的run方法
在单独执行的线程中调用
Java创建一个新线程,该线程在启动run()
方法时执行放入该方法的代码
您需要将runnable作为参数传递给线程的构造函数:
Thread t = new Thread(new ObjectThatImplementsRunnable());
t.start();
从以下文件的javadoc:
使该线程开始执行;Java虚拟机调用
此线程的run方法
您可以在中找到信息。它描述了运行线程的两种方式。
Runnable
部分说明:
创建线程的另一种方法是声明一个实现可运行接口的类。然后该类实现run方法。然后可以分配类的实例,在创建线程时作为参数传递,然后启动。此其他样式中的相同示例如下所示:
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
然后,以下代码将创建一个线程并启动它运行:
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
您可以在中找到信息。它描述了运行线程的两种方式。
Runnable
部分说明:
创建线程的另一种方法是声明一个实现可运行接口的类。然后该类实现run方法。然后可以分配类的实例,在创建线程时作为参数传递,然后启动。此其他样式中的相同示例如下所示:
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
然后,以下代码将创建一个线程并启动它运行:
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
将
Runnable
传递给线程
。请注意,Runnable
实际上与线程没有本质上的关系,尽管提供此类的主要原因是为了线程。但您可以将其用于任何需要具有run()
方法的对象的地方。我用它来处理我想在以后执行的操作排队的情况,而不需要创建新的线程来执行它们。在所有sane实现中,线程支持(例如创建)都是由底层操作系统提供的。操作系统管理I/O,因此它必须管理执行线程。将Runnable
传递给Thread
。请注意,Runnable
实际上与线程没有本质上的关系,尽管提供此类的主要原因是为了线程。但您可以将其用于任何需要具有run()
方法的对象的地方。我用它来处理我想在以后执行的操作排队的情况,而不需要创建新的线程来执行它们。在所有sane实现中,线程支持(例如创建)都是由底层操作系统提供的。操作系统管理I/O,因此它必须管理执行线程。