Java 为什么我们需要一个Runnable来启动线程?

Java 为什么我们需要一个Runnable来启动线程?,java,multithreading,interface,runnable,Java,Multithreading,Interface,Runnable,为什么我们需要在使用runnable接口创建线程时传递runnable实例?我们需要将runnable对象传递给线程对象的构造函数的原因是线程必须有某种方式到达我们希望线程执行的run()方法 举个例子 public class CustomApplet extends Applet { public void init() { Runnable ot = new OurClass(); Thread th =

为什么我们需要在使用
runnable
接口创建线程时传递runnable实例?

我们需要将runnable对象传递给线程对象的构造函数的原因是线程必须有某种方式到达我们希望线程执行的
run()
方法

举个例子

public class CustomApplet extends Applet {
          public void init() {
                Runnable ot = new OurClass();
                Thread th = new Thread(ot);
                th.start();
         }
   }
既然我们不再是 重写Thread类的
run()
方法,Thread类的默认
run()
方法为 执行;此默认的
run()
方法如下所示

public void run() {
         if (ot!= null) {
                    ot.run();
                   }
              } 

因此,
ot
是我们传递给线程构造函数的可运行对象。因此线程从thread类的
run()
方法开始执行,该方法立即调用runnable对象的
run()
方法。

您希望新线程做什么?您可能希望它执行一些代码。但它必须运行什么代码?你不能只是把代码放在一个线程中。Java没有函数指针。解决这个问题的一个小技巧是使用一个实现函数的对象。该函数是
run
。因此,对象必须具有
run
方法。这就是Runnable接口所做的,确保它有一个run方法。因此,如果我们给出一个可运行的对象,线程知道该做什么

thread类是否自动实现runnable接口?