ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

自定义多个线程合理分配下载

2021-02-26 12:30:34  阅读:158  来源: 互联网

标签:自定义 tt 披萨 length 线程 ThreadNum 下载


尝试用java批量下载P站周榜,结果一个线程太慢了,线程多了又怕卡,写死又不值得,于是想有了办法。

使用的是fastjson.
下面是代码段:

JSONArray tempJson = new JSONArray();
        logger.info("获取启动下载线程数量:"+ThreadNum);
        System.out.println("分组数量:"+length / ThreadNum);
        for (int i=0; i<ThreadNum; i++){
            JSONObject temp = new JSONObject();
            for (int j=(length / ThreadNum) * i; j< (((length / ThreadNum)*(i+2)>length) ? length: (length / ThreadNum)*(i+1)); j++){
                JSONObject tt = pics.getJSONObject(j);
                temp.put(tt.getString("pid"), tt.getString(qualify));
            }
            tempJson.add(temp);
        }

其主要部分为内层循环的三目运算。

tempJson是放置全部下载切片的数组;
ThreadNum是用户指定的需要打开的线程数量;
pics为全部图片数据的数组(盘子里的披萨);
for循环判断条件:

  • 外层for:
为每个子线程分配任务(切披萨的刀);
  • 内层for:
每次循环的起点均为上次分割的终点序号,当循环为最后一次时,将剩下的所有元素放入子线程任务队列;

效果:
这里以用户指定3个线程下载为例:
如图所示,22个图片被平均分为了3组(ThreadNum = 3),分别为7,7,8,其中,最后一组被塞入了前两组分完后剩下的一组(无论最后一块披萨多大,都是3线程的)。
效果图
这么做之后,下载速度大大提高,200高清图使用10线程下载仅仅不过几分钟,充分利用带宽。

然后我挂了一会下了以相当快的速度下载完了一整年的周榜图。

标签:自定义,tt,披萨,length,线程,ThreadNum,下载
来源: https://blog.csdn.net/qq_41731201/article/details/114123356

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有