请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Semaphore和FixedThreadPool的区别

老师, new FixedThreadPool(3) 它也可以保证同一时间只有3个任务在执行, 没必要使用信号量啊, 它们二者有啥区别呢?

正在回答

1回答

悟空 2020-02-19 14:29:34

这是一个非常好的问题。让我们举一个在实际业务中会遇到的例子。比如我们在调用该“慢服务”前,需要有判断条件,比如我们只想在每天的0点整才会去访问这个“慢服务”,假设这个“慢服务”是“检查今天是否是星期日”。那么在大部分情况下(除了每天的0点),我们想要有更多的并发线程来提高性能,所以线程池的数量应该设置得大一些,而不仅仅是3个线程。此时我们就可以利用Semaphore来达到这个目的。

类似地,在大型应用程序中,会有不同类型的任务,通过不同的线程池来调用我们的“慢服务”,我们的调用方不仅仅是一个人,或者调用我们的直接是Tomcat服务器或者网关,我们就更不能限制,也不应该限制调用方的线程数量。

而一旦我们使用了Semaphore,由于信号量具有跨线程(跨线程池)的特性,那么即使这些请求来自于不同的线程池,我们也可以限制它们的访问。

基于以上的理由,如果想限制并发访问的线程数,用并发原语Semaphore是更合适的。


2 回复 有任何疑惑可以回复我~
  • 提问者 woy #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-02-19 16:00:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信