【问题标题】:Why do we need a Runnable to start threads?为什么我们需要一个 Runnable 来启动线程?
【发布时间】:2011-08-27 21:01:08
【问题描述】:

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

【问题讨论】:

    标签: java multithreading interface runnable


    【解决方案1】:

    我们需要将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() 方法开始执行,它立即调用我们的可运行对象的run() 方法。

    【讨论】:

    • 线程类是否自动实现runnable接口?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 2019-04-18
      相关资源
      最近更新 更多