控制并发线程数的Semaphore

        并发编程是java语言的一个重要组成部分,jdk给我们提供了有些极为有用的并发工具类,让我们在实际开发中能够减少工作量,解决一些特定的业务需求。我将在这段时间通过实际的业务场景介绍一些好用的并发工具类。

一、概念

        Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理地使用公共资源。

二、业务需求

        假设火车站进行售票,有2个窗口,现在有10个人来排队买票,所以需要排成两队,一个人买完票下个人立即接着买票。我们如何实现上面的业务场景呢?

三、需求提炼及程序设计

        根据上面描述的业务场景,我们可以提炼出如下要点:只有两个窗口进行售票,那就是只能有两个线程同时运行。那我们如何做到同一时间只运行10个访问资源的线程的2个线程呢?Semaphore作为控制同时访问特定资源的线程数量的工具类能够帮我们解决这种业务需求。

        代码如下:

        运行结果如下:

        如上图执行结果看的出来,通过Semaphore控制了同一个时间只运行两个线程来执行买票任务,解决了业务需求。

四、应用场景总结

        Semaphore可以用于做流量控制,特别是公用资源有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为都是IO密集型任务,我们可以启动几十个线程并发地读取,但是如果读到内存后,还需要存储到数据库中,而数据库的连接数只有10个,这时我们必须控制只有10个线程同时获取数据库连接保存数据,否则会报错无法获取数据库连接。

你可能感兴趣的:(控制并发线程数的Semaphore)