线程池可以解决以下场景:
1.当一个接口中,需要调用很多接口,而且互相独立时,如果串行执行,会使得接口响应缓慢(如果需要返回结果使用submit)。
2.当一个接口,调用其它接口且用时长不需要返回结果(可以使用excute)。
3.多个定时任务也可以使用线程池,因为@Scheduled是顺序执行,所以可以使用excute并行执行。
package com.chingchou.test.test;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @Description TODO
* @Date 2021/11/16 9:21
* @Created by jingzhou16
* excute和submit的区别:https://www.cnblogs.com/liuchuanfeng/p/6956014.html
*/
public class TEST_THREAD {
public static int value = 0;
public static void main(String[] args) throws InterruptedException {
ThreadPoolExecutor texecutor = new ThreadPoolExecutor(2, 5, 60, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
texecutor.submit(new Runnable() {
@Override
public void run() {
while(value<50){
synchronized ("suo"){
value = ++value;
System.out.println("线程一:"+value);
}
}
}
});
texecutor.submit(new Runnable() {
@Override
public void run() {
while(value<50){
synchronized ("suo"){
value = ++value;
System.out.println("线程二:"+value);
}
}
}
});
texecutor.shutdown();
while(true){
if(texecutor.isTerminated()){
System.out.println("所有的子线程都结束了!");
break;
}
Thread.sleep(1000);
}
}
}