gpt4 book ai didi

java - 在线程中使用 Lambda

转载 作者:行者123 更新时间:2023-11-29 06:48:47 25 4
gpt4 key购买 nike

当我在 Thread 的构造函数中使用方法引用创建新对象或传递 Lambda 以创建新对象时,

ThreadWorker 不执行。

但是当我单独创建 ThreadWorker 对象并将其传递给 Thread 类时它工作正常。

public class RunnableImpl {
public static void main(String[] args) throws InterruptedException {
ThreadWorker th= new ThreadWorker();
Thread t1 = new Thread(th);
t1.start();
t1.join();
System.out.println("Main method terminated");
}
}

class ThreadWorker implements Runnable {

@Override
public void run() {
int[] arr = { 1, 4, 8, 9, 1, 0, 4, 5, 4 };
System.out.println(Arrays.stream(arr).sum());
}
}

例如,如果我使用 lambda:

Thread t1 = new Thread(ThreadWorker :: new);

Thread t1 = new Thread(() ->new ThreadWorker());

然后没有输出,但如果我单独创建 ThreadWorker 对象,则程序运行正常。

谁能告诉我,这怎么可能?

最佳答案

两者

new Thread(() -> new ThreadWorker());

new Thread(ThreadWorker::new);

创建一个 ThreadRunnable 实例的 run() 方法只是创建一个 ThreadWorker 实例,什么都不做用它。 ThreadWorkerrun() 方法没有执行。

它们相当于传递了下面的匿名类实例:

Thread t = new Thread(new Runnable() {
public void run() {
new ThreadWorker ();
}
});

如果你想使用 lambda 表达式,你需要:

new Thread(() -> new ThreadWorker().run());

如果你想要一个方法引用,你需要:

new Thread(new ThreadWorker()::run);

也就是说,下面要简单得多:

new Thread(new ThreadWorker());

关于java - 在线程中使用 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56422598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com