我知道您通过实现Runnable
接口或扩展Thread
类来启动线程。为了实现Runnable
接口,我被告知我只是使用run()
方法创建一个类,我可以在其中放置我想在线程中运行的任何代码。
我的困惑是:
run()
方法正文只是特定于用户的应用程序代码。那么Java如何实际启动一个线程呢?换句话说,实际启动线程的代码在哪里?我还没有看到Runnable
界面(不知道在哪里找到它),但由于它只是一个界面,所以它可以拥有的只是静态变量和方法签名。不是吗?
答案 0 :(得分:4)
当使用实现接口Runnable的对象创建一个 线程,启动线程导致对象的run方法 在单独执行的线程中调用。
Java创建一个新线程,该线程执行您在启动它时放入run()
方法的代码。
您需要将runnable作为参数传递给Thread的构造函数:
Thread t = new Thread(new ObjectThatImplementsRunnable());
t.start();
来自Thread.start()的javadoc:
使该线程开始执行; Java虚拟机调用 这个线程的run方法。
答案 1 :(得分:2)
您可以在Thread javadoc中找到相关信息。它描述了运行线程的两种方式。 Runnable
部分告诉:
创建线程的另一种方法是声明一个实现Runnable接口的类。该类然后实现run方法。然后可以分配类的实例,在创建Thread时作为参数传递,然后启动。此其他样式中的相同示例如下所示:
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();