Java: 如何使用lambda 表达式将参数传递给Thread 方法?

Java: How to pass parameters into Thread method using lambda expression?

我已经看到很多关于线程和使用接口实现它们的问题,但是似乎没有很多关于如何使用 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)所以我想知道我是否做错了。感谢任何帮助。

您的 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 并通过构造函数传入它需要的东西。

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