采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
我尝试着设置信号量为500,总请求次数为5000,然后在add()方法里休眠100毫秒,这样运行起来后导致了内存溢出,我猜测这个信号量设置后如果有超过信号量的请求进来,就会导致内存溢出,望老师解惑
你好,并不是你猜测的那样,这里因为有sleep存在,导致同一时间是有大量线程存在的,而每个线程都要占申请相应的内存空间和资源,这时候就可能出现操作系统已经无法提供足够的内存和资源了,同时还有一种可能,就是操作系统设置了应用创建线程的最大数量,并且已经达到了最大允许数量
非常感谢!感谢老师的解答,我理解错了信号量的作用,以为达到数量后线程会停止继续创建,但这里信号量的限制是允许同一时间规定数量的线程活动,超过则刮起,所以当进行耗时操作后,线程池会因为前面的线程没有执行完而创建了比之前更多的线程数,导致了oom
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.2k 15
3.6k 12
1.2k 12