因为需要处理大量文件,所以使用了多线程来提高处理速度。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