Semaphore和FixedThreadPool的区别
来源:10-5 Semaphore用法和注意点

woy
2020-02-19
老师, new FixedThreadPool(3) 它也可以保证同一时间只有3个任务在执行, 没必要使用信号量啊, 它们二者有啥区别呢?
写回答
1回答
-
这是一个非常好的问题。让我们举一个在实际业务中会遇到的例子。比如我们在调用该“慢服务”前,需要有判断条件,比如我们只想在每天的0点整才会去访问这个“慢服务”,假设这个“慢服务”是“检查今天是否是星期日”。那么在大部分情况下(除了每天的0点),我们想要有更多的并发线程来提高性能,所以线程池的数量应该设置得大一些,而不仅仅是3个线程。此时我们就可以利用Semaphore来达到这个目的。
类似地,在大型应用程序中,会有不同类型的任务,通过不同的线程池来调用我们的“慢服务”,我们的调用方不仅仅是一个人,或者调用我们的直接是Tomcat服务器或者网关,我们就更不能限制,也不应该限制调用方的线程数量。
而一旦我们使用了Semaphore,由于信号量具有跨线程(跨线程池)的特性,那么即使这些请求来自于不同的线程池,我们也可以限制它们的访问。
基于以上的理由,如果想限制并发访问的线程数,用并发原语Semaphore是更合适的。
212020-02-19
相似问题