我知道在Java中编写线程有两种方法:
当您扩展Thread
类,然后在该线程上调用start()
方法时,start()
类的实现已在Thread
类中定义。
但是当你实现Runnable接口时,你只能定义start()
方法而不是正文。
那么当您使用方法B调用start()
方法时,Java是否知道该怎么做?
答案 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
,而是执行您自己的程序。