java - 了解工作单元

标签 java multithreading unit-of-work

我正在阅读 J. Bloch 的 effective java,现在我在阅读有关执行程序的部分。他说我们应该更喜欢使用执行器而不是直接使用 Thread。据我所知,主要原因是

The key abstraction is no longer Thread , which served as both the unit of work and the mechanism for executing it. Now the unit of work and mechanism are separate. The key abstraction is the unit of work, which is called a task.

工作单元在这里的含义不是很清楚。我试过 search for it并发现有一个与数据库操作相关的设计模式。但是它如何与 Thread 联系起来呢?或者对这种模式还有另一种解释?

最佳答案

它故意含糊不清:它只是“您想要完成的事情”,更准确的含义取决于您。

如果你想下载一个文件,那是一个工作单元。如果你想计算一些大数据的散列,那是一个工作单元。如果您想在屏幕上绘制一些东西,那就是一个工作单元。

这个宣传语的意思是,这个工作单元曾经直接绑定(bind)到 Java 线程(通过 Thread 类),而 Java 线程又相对直接地绑定(bind)到操作系统的线程(有些人在那里挥手 :) ).一种更现代的方法是将工作定义为任务,然后将一堆任务交给生命周期比任何这些任务都长的线程。该线程然后执行这些任务。这使您可以更明确地管理相对重量级的 Thread 资源。

一个粗略的类比是为您要完成的每项任务(编写此规范、煮咖啡或修复此错误)雇用一名新员工,而不是只雇用几名员工并根据需要给他们分配小任务。

关于java - 了解工作单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33686980/

相关文章:

.net - 在哪里使用工作单元模式验证我的实体?

java - 比较两个数组时遇到问题

java - Java 中退出 JFrame 和 TCP 通信之前关闭资源

java - 二维数组的 CopyOfRange

java - ArrayList 中的对象

java - 使用 Spring 和 Apache Commons IO 的 Web 应用程序和目录观察器的线程问题

multithreading - Scala中的后台任务

multithreading - Perl 解释器线程的替代方案是什么?

architecture - 体系结构分层和工作单元模式

c# - 使用存储库的工作单元模式中的依赖注入(inject)