这更像是一个理论问题。我最近用java创建了一个简单的多线程应用程序,并使用ExecutorService来运行和管理线程。我启动线程的方式非常简单,我在我的类中创建一个函数,然后将这个函数作为参数发送到 ExecutorService::execute(( 函数,如下所示:
public void foo(){
//method code here
}
myExecutor.execute(this::foo);
但是正如你所注意到的,我没有在任何地方实现 Runnable 接口,也没有 run(( 方法,但这种方法有效。从我读到的内容来看,传递给 execute 函数的对象应该是带有 run(( 方法的 Runnable(请参阅执行文档(。有人可以解释为什么我的方法有效,以及当我的方法工作时是否真的需要有一个"可运行"对象?
这是因为 :: 运算符(方法引用运算符(是 lambda 函数的简写,它是一个 Runnable,可以这样写:
myExecutor.execute(() -> foo());