在Java中,是否有一个Runnable版本打算在当前线程中执行?

时间:2015-04-07 17:56:00

标签: java runnable

JavaDoc for Runnable状态(强调添加)

  

Runnable接口应该由任何类实现   实例旨在由线程执行。   该类必须定义一个没有参数的方法,称为run。

     

此接口旨在为希望在活动时执行代码的对象提供通用协议。例如,Runnable由Thread类实现。活动只是意味着一个线程已经启动但尚未停止。

     

此外,Runnable提供了一个类活动而不是继承Thread的方法。 实现Runnable的类可以在不通过实例化Thread实例并将其自身作为目标传递给子类的情况下运行。在大多数情况下,如果您只计划覆盖run()方法而不使用其他Thread方法,则应使用Runnable接口。这很重要,因为类不应该是子类,除非程序员打算修改或增强类的基本行为。

有几个人(包括构建我正在使用的代码分析工具的人)从该语句中推断出Runnable应仅用于打算由单独线程执行的类的前提。总的来说,我认为这是Runnable接口的意图,我喜欢按照作者的意图使用代码。

我想要一个类的通用接口,它在CURRENT线程上做一些工作。如果存在,我更愿意使用行业标准。我不需要如何编写自己的界面的例子 - 我只是想知道一个人是否已经存在。

4 个答案:

答案 0 :(得分:3)

所有正在运行的代码都由线程执行!如果它是一个新线程或当前线程并不重要,它仍然是一个线程。以下是Callable对其的描述:

  

Callable接口类似于Runnable,因为它们都是为其实例可能由另一个线程执行的类而设计的。

Runnable的观点是,您不必关心线程结构,只需传递一段可执行代码即可。

这可能是:

在我们的多核世界中,它并不重要。

答案 1 :(得分:3)

当前线程是一个线程。要在当前线程上执行Runnable,只需调用

即可
myRunnable.run();

这是BTW,一些标准类的功能。请参阅示例CallerRunsPolicy

答案 2 :(得分:1)

看看java.util.concurrent.Executor.execute(Runnable命令)。虽然它接受Runnable,但API表示Executor接口并不严格要求执行是异步的。在最简单的情况下,执行程序可以立即在调用者的线程中运行提交的任务

答案 3 :(得分:1)

您对引用语言的解释在语法上是不正确的。

这个语句实际上是关于Thread类,它被设计为使用Runnable接口来使Thread能够执行任意代码块。声明说,基本上,如果你想以这种方式使用Thread,你必须实现Runnable。

它并不是说这是应该使用Runnable的唯一方法。事实上,该声明在该主题上完全保持沉默。

这句话令人困惑,因为它使用被动语态。我认为一个更好的句子将是:"要让Thread执行一些代码,实现Runnable接口并将代码放在run()方法中。"