使用方法参考,我可以创建一个带有以下代码的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。