Runnable接口启动方法

时间:2014-02-04 03:35:44

标签: java multithreading

我知道在Java中编写线程有两种方法:

  • 方法A:扩展线程类
  • 方法B:使用Runnable接口。

当您扩展Thread类,然后在该线程上调用start()方法时,start()类的实现已在Thread类中定义。

但是当你实现Runnable接口时,你只能定义start()方法而不是正文。

那么当您使用方法B调用start()方法时,Java是否知道该怎么做?

3 个答案:

答案 0 :(得分:1)

您不单独使用Runnable实施;您将它传递给一个为您调用run方法的线程。将runnable(或callable)传递给线程池时也会发生这种情况。

您可以在Thread类的源代码中查看机制。

答案 1 :(得分:0)

您不能使用Runnable方法运行start(),而Thread类不具有start类。相反,您可以执行以下任何操作

    B b = new new B();  // assuming B implements Runnable
    new Thread(b).start();
            // or
    b.run();

但上述两种方式之间存在显着差异。

在第一种情况下,创建了另一个执行Runnable任务的线程。但在第二种情况下,没有创建外部线程。

答案 2 :(得分:0)

在使用线程时,您实际上不会覆盖start方法,而是覆盖run方法。

Thread类已有run的默认实现,如果有Runnable绑定,则运行Thread

当您覆盖run方法时,基本上说您不希望Thread运行Runnable,而是执行您自己的程序。