什么是工作线程,它们在反应堆模式中的作用是什么?

Jon*_*Jon 24 java multithreading design-patterns reactor

我正试图进行Reactor模式(并发),但在很多例子中他们都在讨论'工作线程'.什么是工作线程?它们与"正常"线程的区别是什么?他们在反应堆模式中的作用是什么?

Aar*_*lla 34

反应堆模式用于与工作线程,以克服在应用程序中常见的场景:你需要做大量的工作,但最终你不知道哪些工作以及何时创建线程是一个昂贵的操作.

这个想法是你创建了许多线程,它们最初没有做任何事情.相反,他们"等待工作".当工作到达时(以代码的形式),某种执行器服务(反应器)从池中识别空闲线程并分配它们要做的工作.

这样,您可以付出代价来创建所有线程一次(而不是每次都需要完成一些工作).同时,你的线程是通用的; 他们会做任何分配给他们的工作,而不是专门做某些特定的事情.

有关实现,请查看线程池.

  • 很好的答案.我不知道Reactor模式. (2认同)

Gra*_*ray 19

我假设您正在讨论类似线程池的文档:

java.util.concurrent中的大多数执行程序实现都使用由工作线程组成的线程池.这种线程与它执行的Runnable和Callable任务分开存在,通常用于执行多个任务.

工作线程是普通线程,但它们与它们所处理的类Runnable或它们分开存在Callable.如果扩展ThreadThread使用Runnable参数构造a ,则任务将Thread直接绑定到对象.

使用Executors.newFixedThreadPool(10);(或其他类似方法)创建线程池时,可以创建一个包含10个线程的池,这些线程可以运行提交到池的任意数量的不同RunnableCallable类.在封面下方,Thread由于它们被包裹的方式,它们仍然更加灵活.

反应器模式而言,处理程序线程运行不同类型的事件,这类似.线程不依赖于单个事件类,但会在发生时运行任意数量的不同事件.

  • 看看Javadocs @Jon.`Runnable`有一个方法`void run()`而``Callable <T>`有一个方法`T call()`.`Callable`方法允许您从提交给工作池的作业返回一个值. (4认同)