关于java.util.concurrent您不知道的5件事,第2部分 - 编程入门网
关于java.util.concurrent您不知道的5件事,第2部分时间:2012-04-24 IBM Ted Neward并发 Collections 提供了线程安全、经过良好调优的数据结构,简化了并发编程。然而, 在一些情形下,开发人员需要更进一步,思考如何调节和/或限制线程执行。由于 java.util.concurrent 的总体目标是简化多线程编程,您可能希望该包包含同步实用程序,而 它确实包含。 本文是 第 1 部分 的延续,将介绍几个比核心语言原语(监视器)更高级的同步结构,但 它们还未包含在 Collection 类中。一旦您了解了这些锁和门的用途,使用它们将非常直观。 1. Semaphore 在一些企业系统中,开发人员经常需要限制未处理的特定资源请求(线程/操作)数量,事 实上,限制有时候能够提高系统的吞吐量,因为它们减少了对特定资源的争用。尽管完全可以 手动编写限制代码,但使用 Semaphore 类可以更轻松地完成此任务,它将帮您执行限制,如清 单 1 所示: 清单 1. 使用 Semaphore 执行限制
即使本例中的 10 个线程都在运行(您可以对运行 SemApp 的 Java 进程执行 jstack 来验 证),但只有 3 个线程是活跃的。在一个信号计数器释放之前,其他 7 个线程都处于空闲状 态。(实际上,Semaphore 类支持一次获取和释放多个 permit,但这不适用于本场景。) 关于java.util.concurrent您不知道的5件事,第2部分(2)时间:2012-04-24 IBM Ted Neward2. CountDownLatch 如果 Semaphore 是允许一次进入一个(这可能会勾起一些流行夜总会的保安的记忆)线程 的并发性类,那么 CountDownLatch 就像是赛马场的起跑门栅。此类持有所有空闲线程,直到 满足特定条件,这时它将会一次释放所有这些线程。 清单 2. CountDownLatch:让我们去赛马吧!
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |