如何使用lambda用命名线程初始化线程捕集



使用方法参考,我可以创建一个带有以下代码的threadfactory实例:

ThreadFactory factory = Thread::new;

从ThreadFactory的接口定义中,Thread::new将被解释为具有签名public Thread(Runnable target)

的构造函数

线程还具有另一个超载构造函数public Thread(Runnable target, String name)

我会问如何使用此构造函数和方法参考/lambda构造线程factory?

ThreadFactory具有单个抽象方法Thread newThread(Runnable),因此我们需要一个lambda,该lambda需要一个Runnable并返回线程。您想使用一个使用两个参数的方法(构造函数(,然后将其变成只需要其中一个参数的方法。

创建一个"减少"输入数的函数称为 currying ,并且使用它是 partial Application 。在这种情况下,您要提前应用线程名称部分。使用lambda,您可以做到这一点:

String name = "thread-name";
ThreadFactory factory = runnable -> new Thread(runnable, name);
// -> captures the value in "name"

请注意,这将在每次调用时都会产生完全相同的线程名称,因此您不想在反复使用它的情况下使用它。

某些库,例如vavr,具有内置的支持,用于使用n个参数并修复一个函数,但它不是内置的JDK,并且固定非第一个参数通常需要自定义的lambda。

最新更新