【发布时间】:2020-04-01 12:01:27
【问题描述】:
我有一个类分别包含 2 个静态和非静态方法,根据我的有限知识,提交方法直接接受可运行的、可调用的实例或通过 lamba 表达式。
今天我知道,我们甚至可以直接调用或触发静态和非静态方法,使用java 8中添加的双冒号。
我只是想知道这是如何工作的,我的类中没有 run 方法,它没有实现 runnable 甚至我没有使用 lamba?
使用 :: 是一种好习惯,还是应该传递可运行或可调用实例。
还有其他方法可以在 submit() 中调用方法而不是传递实例吗?
Class A {
public static void printSomething(){
System.out.println("Staitc Method");
}
public void print()
{
System.out.println("Non-Staitc Method");
}
}
psvm()
{
A a = new A():
ExecutorService es = Executors.newFixedThreadPool(2);
es.submit(A::printSomething); //Expected is runnable or callable task
es.submit(a::print);
}
【问题讨论】:
-
你可以
es.submit(() -> { // code/invoke a void method here });。run方法调用您的print方法。 -
@Naman 这是有效的 lambda 表达式,间接它是 run 方法,但 :: 是如何工作的?
-
链接的问题很好地回答了不同答案中的各种示例。
标签: java multithreading java-8 concurrency executorservice