Java线程:实现runnable如何为线程工作

sta*_*low 4 java multithreading

我知道如果你想要线程,你可以在java中扩展线程或实现runnable到multithread.但为什么你必须实现java的接口线程?什么是可运行的接口的重要性,使java线程工作?Java的界面是否扩展了什么?

Mar*_*ers 10

关于Runnable接口唯一特别之处在于它是Thread构造函数的内容.这只是一个简单的界面.

与大多数接口,问题是,你正在编写一个合同:你同意把你想在运行代码Runnable#run()执行,并Thread同意在另一个线程运行的代码(当您创建和启动Thread它) .

Thread实际上是"做"多线程(因为它与本机系统交互).实现Runnable就是放置要Thread运行的代码的位置.

实际上,您可以实现Runnable并运行它,而无需在单独的线程中运行:

Runnable someCode = new Runnable() {
    public void run() {
       System.out.println("I'm a runnable");
    }
};
someCode.run();
Run Code Online (Sandbox Code Playgroud)

因此,Runnable它本身与多线程没有任何关系,它只是在对象中封装代码块时扩展的标准接口.

  • +1也就是说,Runnable只定义了一个接口,所以线程知道"调用什么方法"/"从哪里开始"..有些人不小心调用了`theRunnable.run()`并期望它神奇地启动一个线程:它确实不. (4认同)
  • 也就是说,最常见(也是首选)的并发方法之一就是尽可能避免直接操作线程,而是将`Runnable`s传递给`Executor`s. (3认同)