Java,为什么 ExecutorService::executor() 可以执行不实现 Runnable 接口的功能?



这更像是一个理论问题。我最近用java创建了一个简单的多线程应用程序,并使用ExecutorService来运行和管理线程。我启动线程的方式非常简单,我在我的类中创建一个函数,然后将这个函数作为参数发送到 ExecutorService::execute(( 函数,如下所示:

public void foo(){ 
//method code here
}
myExecutor.execute(this::foo);

但是正如你所注意到的,我没有在任何地方实现 Runnable 接口,也没有 run(( 方法,但这种方法有效。从我读到的内容来看,传递给 execute 函数的对象应该是带有 run(( 方法的 Runnable(请参阅执行文档(。有人可以解释为什么我的方法有效,以及当我的方法工作时是否真的需要有一个"可运行"对象?

这是因为 :: 运算符(方法引用运算符(是 lambda 函数的简写,它是一个 Runnable,可以这样写:

myExecutor.execute(() -> foo());

相关内容

  • 没有找到相关文章

最新更新