这可能是有争议的,但我刚刚意识到我很少使用等待并直接通知.相反,我使用包中的一些更高级别的构造java.util.concurrent.是否存在等待和通知是唯一解决方案的用例,还是应该仅在构建更高级别的构造时使用它们?
是否存在等待和通知是唯一解决方案的用例,或者它们应该仅在构建更高级别的构造时使用?
它们只能在构建更高级别的结构时使用。如果您遇到现有的更高级别构造无法解决您的问题的情况,您不想恢复为等待/通知;你想设计一个更高层次的结构来解决你的问题。您可以使用 wait/notify 来实现它。
例如,我曾经遇到一个问题,需要并发执行具有层次依赖性的任务集合,其中依赖性条件涉及合取(“和”)和析取(“或”)的组合。即,存在一个任务的条件是“任务 A 已完成且任务 B 已完成”的情况、“任务 A 已完成或任务 B 已完成”的情况以及这些条件的各种组合(例如,“任务 A 已完成”)。完成,并且任务 B 或任务 C 已完成”)。
因此,我编写了一个小型实用程序库,它为客户端提供了一个接口,用于提交带有条件注释的任务集合,在Executor满足先决条件后立即将这些任务提交给 ,并监视任务完成情况以启动新的合格任务。其中一些是使用java.util.concurrent(主要是Executor和Semaphore)实现的,但其他部分涉及使用 wait/notify(“协调器”线程通过 wait/notify 通知任务完成)。
因此,代码最终变得更容易理解和排除故障,后来我们发现了同一任务协调器库的其他用途。
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |