1.线程池主要作用: ①控制线程数量 ②重用线程
package day01;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 线程池主要作用:
* 1:控制线程数量
* 2:重用线程
* @author 爱吃木鱼的猫
*/
public class Demo01 {
public static void main(String[] args) {
ExecutorService threadPool=Executors.newFixedThreadPool(2);//容量为2的线程池
for(int i=0;i<4;i++){
Runnable runn = new Runnable(){
public void run(){
try{
Thread t= Thread.currentThread();
System.out.println("任务"+t.getName()+":开始...");
Thread.sleep(3000);
System.out.println("任务"+t.getName()+":结束");
}catch(Exception e){
System.out.println("线程被中断了!");
}
}
};
threadPool.execute(runn);
//System.out.println("指派了一个任务"+i);
}
threadPool.shutdown();//停止
//threadPool.shutdownNow();//立即停止
System.out.println("停止了线程池");
}
}
从结果可以看出:4个线程中2个可以先进入线程池中,剩下2个阻塞等待中,只要常量池中一旦有一个完成的剩下的便运行一个;
shutdown后,如果还有未完成的就继续完成(左图结果);
shutdownNow后,即使没有完成也要强制停止(右图结果)