在Java中,是否有打算在当前线程中执行的Runnable版本?
In Java, is there a version of Runnable that is intended to be executed in the current thread?
Runnable 状态的 JavaDoc(添加了重点)
The Runnable interface should be implemented by any class whose
instances are intended to be executed by a thread.
The class must define a method of no arguments called run.
This interface is designed to provide a common protocol for objects that wish to execute code while they are active. For example, Runnable is implemented by class Thread. Being active simply means that a thread has been started and has not yet been stopped.
In addition, Runnable provides the means for a class to be active while not subclassing Thread. A class that implements Runnable can run without subclassing Thread by instantiating a Thread instance and passing itself in as the target. In most cases, the Runnable interface should be used if you are only planning to override the run() method and no other Thread methods. This is important because classes should not be subclassed unless the programmer intends on modifying or enhancing the fundamental behavior of the class.
几个人(包括那些构建我正在使用的代码分析工具的人)从该声明中推断出 Runnable 应该只用于 class 打算由单独的线程。总的来说,我认为这就是Runnable接口的意图,我喜欢按照作者的意图使用代码。
我想要一个 class 的通用接口,它在 CURRENT 线程上做一些工作。如果存在,我更愿意使用行业标准。我不需要如何编写自己的界面的示例 - 我只是想知道是否已经存在。
所有运行代码都是线程执行的!不管是新线程还是当前线程,它仍然是一个线程。 Callable 是这样描述的:
The Callable interface is similar to Runnable, in that both are designed for classes whose instances are potentially executed by another thread.
Runnable 的要点是您不必关心线程结构,只需关心传递一段可执行代码即可。
这可能是:
- 在特定线程上,如 SwingUtilities.invokeAndWait。
- 在任意新线程上,如 Executors.newSingleThreadScheduledExecutor。
- 在线程池上,与 Executors.newCachedThreadPool
一样
在我们的多核世界中,这应该无关紧要。
当前线程是一个线程。要在当前线程上执行 Runnable,只需调用
myRunnable.run();
顺便说一下,一些标准 类 所做的。例如参见 [=11=]
看看 java.util.concurrent.Executor.execute(可运行的命令)。尽管它接受 Runnable,API 表示 Executor 接口并不严格要求执行是异步的。在最简单的情况下,执行者可以运行立即在调用者的线程
中提交任务
您对引用语言的解释在语法上不正确。
这个语句实际上是关于 Thread
class,它被设计为使用 Runnable
接口来使线程能够执行任意代码块。该声明实质上说,如果您想以这种方式使用 Thread,则必须实现 Runnable。
它并没有说这是应该使用 Runnable 的唯一方式。事实上,该声明在该主题上完全没有提及。
这句话令人困惑,因为它使用了被动语态。我认为更好的句子应该是这样的:"To have a Thread execute some code, implement the Runnable interface and place the code in the run() method."
java.lang.Runnable
是一个 interface
。它声明了一个方法,void run()
。它也恰好是 @FunctionalInterface
.
从技术上讲,没有任何其他人需要知道的。如果您使用的库需要 Runnable
,那么您别无选择,只能提供 Runnable
。如果您正在实现一个库,并且您希望您的客户提供一个具有 void run()
方法的对象,那么嘿! Runnable
在那里。为什么不使用它?
从风格上讲,您可能只应在图书馆希望其客户端提供某种方法(“任务”、“回调”)的情况下使用 Runnable
等),图书馆预计稍后会调用。
没有什么能阻止你这样做:
class MarathonRunner implements Runnable {
...
void run() {
...
}
}
但是您的软件极客们可能会觉得有点 奇怪。
Runnable 状态的 JavaDoc(添加了重点)
The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread. The class must define a method of no arguments called run.
This interface is designed to provide a common protocol for objects that wish to execute code while they are active. For example, Runnable is implemented by class Thread. Being active simply means that a thread has been started and has not yet been stopped.
In addition, Runnable provides the means for a class to be active while not subclassing Thread. A class that implements Runnable can run without subclassing Thread by instantiating a Thread instance and passing itself in as the target. In most cases, the Runnable interface should be used if you are only planning to override the run() method and no other Thread methods. This is important because classes should not be subclassed unless the programmer intends on modifying or enhancing the fundamental behavior of the class.
几个人(包括那些构建我正在使用的代码分析工具的人)从该声明中推断出 Runnable 应该只用于 class 打算由单独的线程。总的来说,我认为这就是Runnable接口的意图,我喜欢按照作者的意图使用代码。
我想要一个 class 的通用接口,它在 CURRENT 线程上做一些工作。如果存在,我更愿意使用行业标准。我不需要如何编写自己的界面的示例 - 我只是想知道是否已经存在。
所有运行代码都是线程执行的!不管是新线程还是当前线程,它仍然是一个线程。 Callable 是这样描述的:
The Callable interface is similar to Runnable, in that both are designed for classes whose instances are potentially executed by another thread.
Runnable 的要点是您不必关心线程结构,只需关心传递一段可执行代码即可。
这可能是:
- 在特定线程上,如 SwingUtilities.invokeAndWait。
- 在任意新线程上,如 Executors.newSingleThreadScheduledExecutor。
- 在线程池上,与 Executors.newCachedThreadPool 一样
在我们的多核世界中,这应该无关紧要。
当前线程是一个线程。要在当前线程上执行 Runnable,只需调用
myRunnable.run();
顺便说一下,一些标准 类 所做的。例如参见 [=11=]
看看 java.util.concurrent.Executor.execute(可运行的命令)。尽管它接受 Runnable,API 表示 Executor 接口并不严格要求执行是异步的。在最简单的情况下,执行者可以运行立即在调用者的线程
中提交任务您对引用语言的解释在语法上不正确。
这个语句实际上是关于 Thread
class,它被设计为使用 Runnable
接口来使线程能够执行任意代码块。该声明实质上说,如果您想以这种方式使用 Thread,则必须实现 Runnable。
它并没有说这是应该使用 Runnable 的唯一方式。事实上,该声明在该主题上完全没有提及。
这句话令人困惑,因为它使用了被动语态。我认为更好的句子应该是这样的:"To have a Thread execute some code, implement the Runnable interface and place the code in the run() method."
java.lang.Runnable
是一个 interface
。它声明了一个方法,void run()
。它也恰好是 @FunctionalInterface
.
从技术上讲,没有任何其他人需要知道的。如果您使用的库需要 Runnable
,那么您别无选择,只能提供 Runnable
。如果您正在实现一个库,并且您希望您的客户提供一个具有 void run()
方法的对象,那么嘿! Runnable
在那里。为什么不使用它?
从风格上讲,您可能只应在图书馆希望其客户端提供某种方法(“任务”、“回调”)的情况下使用 Runnable
等),图书馆预计稍后会调用。
没有什么能阻止你这样做:
class MarathonRunner implements Runnable {
...
void run() {
...
}
}
但是您的软件极客们可能会觉得有点 奇怪。