JavaDoc for Runnable状态(强调添加)
Runnable接口应该由任何类实现 实例旨在由线程执行。 该类必须定义一个没有参数的方法,称为run。
此接口旨在为希望在活动时执行代码的对象提供通用协议。例如,Runnable由Thread类实现。活动只是意味着一个线程已经启动但尚未停止。
此外,Runnable提供了一个类活动而不是继承Thread的方法。 实现Runnable的类可以在不通过实例化Thread实例并将其自身作为目标传递给子类的情况下运行。在大多数情况下,如果您只计划覆盖run()方法而不使用其他Thread方法,则应使用Runnable接口。这很重要,因为类不应该是子类,除非程序员打算修改或增强类的基本行为。
有几个人(包括构建我正在使用的代码分析工具的人)从该语句中推断出Runnable应仅用于打算由单独线程执行的类的前提。总的来说,我认为这是Runnable接口的意图,我喜欢按照作者的意图使用代码。
我想要一个类的通用接口,它在CURRENT线程上做一些工作。如果存在,我更愿意使用行业标准。我不需要如何编写自己的界面的例子 - 我只是想知道一个人是否已经存在。
答案 0 :(得分:3)
所有正在运行的代码都由线程执行!如果它是一个新线程或当前线程并不重要,它仍然是一个线程。以下是Callable对其的描述:
Callable接口类似于Runnable,因为它们都是为其实例可能由另一个线程执行的类而设计的。
Runnable的观点是,您不必关心线程结构,只需传递一段可执行代码即可。
这可能是:
在我们的多核世界中,它并不重要。
答案 1 :(得分:3)
答案 2 :(得分:1)
看看java.util.concurrent.Executor.execute(Runnable命令)。虽然它接受Runnable,但API表示Executor接口并不严格要求执行是异步的。在最简单的情况下,执行程序可以立即在调用者的线程中运行提交的任务
答案 3 :(得分:1)
您对引用语言的解释在语法上是不正确的。
这个语句实际上是关于Thread
类,它被设计为使用Runnable
接口来使Thread能够执行任意代码块。声明说,基本上,如果你想以这种方式使用Thread,你必须实现Runnable。
它并不是说这是应该使用Runnable的唯一方法。事实上,该声明在该主题上完全保持沉默。
这句话令人困惑,因为它使用被动语态。我认为一个更好的句子将是:"要让Thread执行一些代码,实现Runnable接口并将代码放在run()方法中。"