采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师, new FixedThreadPool(3) 它也可以保证同一时间只有3个任务在执行, 没必要使用信号量啊, 它们二者有啥区别呢?
这是一个非常好的问题。让我们举一个在实际业务中会遇到的例子。比如我们在调用该“慢服务”前,需要有判断条件,比如我们只想在每天的0点整才会去访问这个“慢服务”,假设这个“慢服务”是“检查今天是否是星期日”。那么在大部分情况下(除了每天的0点),我们想要有更多的并发线程来提高性能,所以线程池的数量应该设置得大一些,而不仅仅是3个线程。此时我们就可以利用Semaphore来达到这个目的。
类似地,在大型应用程序中,会有不同类型的任务,通过不同的线程池来调用我们的“慢服务”,我们的调用方不仅仅是一个人,或者调用我们的直接是Tomcat服务器或者网关,我们就更不能限制,也不应该限制调用方的线程数量。
而一旦我们使用了Semaphore,由于信号量具有跨线程(跨线程池)的特性,那么即使这些请求来自于不同的线程池,我们也可以限制它们的访问。
基于以上的理由,如果想限制并发访问的线程数,用并发原语Semaphore是更合适的。
非常感谢!
登录后可查看更多问答,登录/注册
JUC全方位讲解,构建并发工具类知识体系
961 11
1.4k 10
994 10
976 10
1.4k 9