前言
首先大家要明白进程和线程,当用户打开一个网页点击上传图片这是一个进程,而后台我们写的代码可以单线程上传图片,也可以多线程上传图片,如果是多线程的话,目前是禁止自己显式的创建线程,而是必须用到线程池来使用多线程。所以这也就涉及到了线程池的使用。
现在想想笔者当时同步api所遇到的痛苦,我和大家说一下。当初笔者同步api数据,一条数据里面有3处需要下载图片进来,并且每处还都有7-8张图片,当初傻傻的不知道使用多线程,就是单线程慢慢执行,结果速度好慢,那么现在想一想,这种情况完全可以用到多线程,这3处图片,每个地方用到一个线程,这速度简直是太爽,下面通过代码的形式简单的展示一下(笔者这里用到的是若依的框架,线程池也是若依封装了一下的)。
代码展示
//获得线程池
private ThreadPoolTaskExecutor executor = SpringUtils.getBean("threadPoolTaskExecutor");
@Override
public void test() throws InterruptedException {
//这里笔者直接写了3个,来模拟上方的下载图片
//把要处理的业务放到线程池里面,休眠时间3秒,用来模拟下载所需的时间
executor.submit(()->{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("下载图片一");
});
executor.submit(()->{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("下载图片二");
});
executor.submit(()->{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("下载图片三");
});
}
结尾
如果笔者当时下载图片用到上方的方式,那么时间就会从9秒缩减至3秒,这样的效率谁不爱?所以多线程该使用的时候必须使用,上述代码清晰的展示了线程池的使用方法,其实很简单。至于线程池的一些配置,比如说核心线程、最大线程、队列长度、空闲时间都是要根据具体业务来分析。