图片高效率下载

chengxu2011 2015-03-25 05:53:34
场景描述:我有一个消息中间件一直给我推送消息 每秒的数据量可以达到200条左右数据,然后这些数据是图片的url地址,然后我要尽快的去下载这些图片。
我现在的做法是一旦接受到消息 拿到图片的地址后就把下载图片的任务往线程池里面,然后用的线程池刚开始是用的缓冲线程池,但是用的过程中发现一个问题,就是多个线程一起去下图片 立马就把内存撑爆了 会导致内存溢出,然后我就加大了内存 ,这时候又发现个问题,因为用的是缓存线程,执行过程中报创建线程失败,网上搜了下说如果jvm的内存调的越大,则可以分配的线程就越少,所以导致了创建失败。没办法换成了一个固定线程池,然后发现固定线程池里面的队列积累了很多数据,这样就有很大的延时了,后来我就一点一点的在调固定线程池的大小 和内存的大小(如果固定线程池的线程过大,则多个线程一起下载图片,一下又会把内存撑爆,所以调内存高,但是内存一高 又报创建线程失败 导致程序卡死)好坑爹啊。现在好无奈,把固定线程池调到了500大小,但是里面积累的数据好的 。。。 求大神有什么好的解决方案啊
...全文
114 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
scmod 2015-03-25
  • 打赏
  • 举报
回复
下载这个只能跟速度有关了啊..... 还有就是建立连接的那个也要用连接池 别的好像想不出来了...
飏飏一蝶 2015-03-25
  • 打赏
  • 举报
回复
提供个思路,个人看法: 你讲所有url依次缓存起来 然后限定一定数量的下载任务进入线程池 某一线程完成任务立即从rul缓存中取出来 有点像消息队列机制

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧