我正在尝试使用Reactor模式(并发),但在许多示例中,它们都在讨论“工作线程”。什么是工作线程?它们与“正常”线程的区别是什么?他们在反应堆模式中的作用是什么?
答案 0 :(得分:30)
Reactor pattern与工作线程一起使用以克服应用程序中的常见情况:您最终需要做很多工作,但是您不知道哪些工作以及何时创建线程是一项昂贵的操作。< / p>
这个想法是你创建了许多线程,它们最初没有做任何事情。相反,他们“等待工作”。当工作到达时(以代码的形式),某种执行器服务(反应器)识别池中的空闲线程并指定它们要做的工作。
这样,您可以付出代价来创建所有线程一次(而不是每次都需要完成一些工作)。同时,你的线程是通用的;他们会做任何分配给他们的工作,而不是专门做一些具体的工作。
有关实施,请查看thread pools。
答案 1 :(得分:18)
我假设你在谈论like this documentation on thread-pools:
java.util.concurrent中的大多数执行程序实现都使用由工作线程组成的线程池。这种线程与它执行的Runnable和Callable任务分开存在,通常用于执行多个任务。
工作线程是普通线程,但它们与它们所处理的Runnable
或Callable
类不同。如果您扩展Thread
或使用Thread
参数构造Runnable
,则该任务将直接与Thread
对象绑定。
使用Executors.newFixedThreadPool(10);
(或其他类似方法)创建线程池时,您可以创建一个包含10个线程的池,这些线程可以运行任意数量的不同Runnable
或Callable
类被提交到游泳池。在封面下方,由于它们被包裹的方式,它们仍然是Thread
更灵活。
就reactor pattern而言,处理程序线程运行不同类型的事件是类似的。线程不依赖于单个事件类,但会在发生时运行任意数量的不同事件。