package com.daimac.worm;

import com.alibaba.fastjson.JSON;
import com.daimac.worm.entity.PPTEntity;
import com.daimac.worm.thread.PPTThread;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.*;

import static com.alibaba.fastjson.serializer.SerializerFeature.PrettyFormat;

@Slf4j
public class Test {
    public static void main(String[] args) throws IOException {
        long t1 = System.currentTimeMillis();
        File file = new File("/ppt.txt");
        FileOutputStream out = new FileOutputStream(file);
        PrintStream printStream = new PrintStream(out);

        List<PPTThread> threads = new ArrayList<>();

        // 总页数(目前第一ppt是106页)
        int pageCount = 106;

        // 线程数(并不是越多越好,考虑带宽,线程切换消耗)
        int tnum = 30;

        // 平均每个线程需要工作数量
        int offset = 106 / tnum;

        // 所有pptlist
        List<PPTEntity> ppts = Collections.synchronizedList(new ArrayList<>());

        for (int i = 1; i <= tnum; i++) {
            // 获取范围
            int begin = (i - 1) * offset;
            int end = i * offset;

            end = i == tnum ? pageCount : end;

            PPTThread thread = new PPTThread(ppts);
            thread.setNumBegin(begin);
            thread.setNumEnd(end);
            thread.setName("work-thread-" + i);
            thread.start();
            threads.add(thread);
        }

        new Thread(() -> {
            while (true) {
                // 定时检测状态
                log.debug("----------------------------------------");
                threads.forEach(v -> {
                    log.debug("线程名:" + v.getName());
                    log.debug("任务总数:" + (v.getNumEnd() - v.getNumBegin()));
                    log.debug("当前工作页码:" + (v.getCurrWork() - v.getNumBegin()));
                    log.debug("错误页码数:" + v.getErrorPage());
                    log.debug("错误索引数:" + v.getErrorIndex() + "\n");

                });

                log.debug("----------------------------------------");
                long notComplete = threads.stream().filter(v -> !v.isComplete()).count();
                if(notComplete == 0){
                    long t2 = System.currentTimeMillis();
                    log.debug("全部完成,耗时:"+(t2-t1)+"毫秒");
                    ppts.sort((o1, o2) -> o2.getUpdateTime().compareTo(o1.getUpdateTime()));
                    printStream.println(JSON.toJSONString(ppts,PrettyFormat));
                    break;
                }
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}
最近下载更多
crosa_Don  LV18 2022年6月16日
1412342464  LV1 2020年11月5日
bjf5211  LV2 2020年8月20日
sskhnwk  LV1 2020年2月8日
liugiant  LV1 2019年8月31日
jesse12  LV1 2019年5月7日
longyin2018  LV14 2019年2月28日
jerryboy  LV5 2018年11月22日
枫林晚  LV12 2018年11月13日
senyzzm  LV5 2018年10月31日
最近浏览更多
tyyeng  LV18 2023年10月10日
805140383 2023年2月22日
暂无贡献等级
sunlea  LV17 2023年2月21日
好的好的  LV8 2022年7月7日
crosa_Don  LV18 2022年6月16日
wangxin199804  LV9 2022年4月23日
fellowfun  LV12 2022年3月31日
zhllzhll  LV7 2022年1月6日
忆千歌  LV5 2022年1月2日
志犟CR7  LV3 2021年11月17日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友