java多线程,为什么服务器上的线程数达不到线程池的数量?

因为需要处理大量文件,所以使用了多线程来提高处理速度。java程序调用了外部程序来处理文件 

在运行的时候,仅在java程序启动的时候,使用top观察会出现接近线程池数量的线程。但是随着时间的推移,每次同时执行的线程远远小于线程池的数量。

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(40);

@Scheduled(fixedRate = 1000)
public void pdfLTask() {

    fixedThreadPool.execute(new Runnable() {
        @Override
        public void run() {
            task();
        }
    });
}

public void task() {
    int a = 0;
    FileJedisPojo bean = getRedisInfo();
    if (bean != null && bean.getFile_id() != null && !"".equals(bean.getFile_id())) {
        System.out.println(" file_id ::::: " + bean.getFile_id());
        File file = new File("/ftpdata/img/" + bean.getFile_id() + ".jpg");
        if (file.exists()) {
            a = taskLPdf(bean);
        }
    }
}

 public  FileJedisPojo getRedisInfo() {
        FileInfoPojo info = null;
        FileJedisPojo pojo = null;
        Jedis jedis = null;
        try {
            jedis = new Jedis(hostName, port);
            jedis.auth(password);
            long len = jedis.llen(theme);
            if (len > 0) {
                String fileStr = jedis.lpop(theme);
                jedis.lrem(theme, 0, fileStr);
                info = new Gson().fromJson(fileStr, FileInfoPojo.class);
                pojo = new FileJedisPojo();
                pojo.setFile_id(info.getFile_id());
                String fileUrl = "/ftpdata/img/" + pojo.getFile_id() + ".jpg";
                FileUtil.getFile(info.getOss_url(), "/ftpdata/img/" + pojo.getFile_id() + ".jpg");
                pojo.setFile_url(fileUrl);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
        return pojo;
    }

 

因为同时执行的线程数没有多余线程池中的线程数。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632