繁体   English   中英

如何使用Lambda使用命名线程初始化ThreadFactory

[英]How to use lambda to initialize ThreadFactory with named Thread

使用方法参考,我可以使用以下代码创建ThreadFactory实例:

ThreadFactory factory = Thread::new;

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

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

我会问如何使用此构造函数和方法reference / lambda构造ThreadFactory?

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

创建一个“减少”输入数量的函数称为currying ,使用它是部分应用程序 在这种情况下,您希望提前部分应用线程名称。 使用lambda,您可以执行以下操作:

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

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

一些库( 例如Vavr )内置了对带有N个参数的函数进行固定并对其进行修复的支持,但JDK并未内置该函数,并且对非第一个参数的修复通常无论如何都需要自定义lambda。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM