1

我已经看到很多关于线程的问题并使用接口来实现它们,但似乎没有很多关于如何使用 lambda 表达式来完成的更新信息。我对此有点陌生,所以我不确定。典型的看起来像:

Thread myThread = new Thread(() -> {
    // Code to be executed inside the thread    
});

如果我已经定义并导入了一个方法,我可以这样做吗?

Thread myThread = new Thread(() -> myMethod(a, b)); //where a and b are parameters

基本上我只想在创建的线程中运行一个方法,并且该方法还需要在其中传递一些参数。我如何实现这一目标?使用 myMethod 尝试上述操作给了我 -1 的 threadCPUTime(使用 MXBean),所以我想知道我是否做错了。任何帮助表示赞赏。

4

1 回答 1

2

您的 lambda 可以在定义它的范围内读取最终变量。因此,最简单的方法是为要传递给 myMethod 的内容创建最终变量。

final int a = 1;
final int b = 2;
Thread myThread = new Thread(() -> { myMethod(a,b); });
myThread.start();  // don’t forget to execute it, just creating it won’t run the thread 

实际上,变量可以是“有效的最终”,而不是技术上的最终。创建一个变量并且不要更改其中的内容,lambda 无法检测变量的变化。但是用 final 来强制执行它可能也是一样的。

否则不要使用 lambda,定义 Runnable 或 Callable 并通过构造函数传入它需要的内容。

在我看来,真正的问题可能不是像评论中指出的那样启动线程。

于 2021-09-10T03:25:28.303 回答