在使用线程池前,需要了解一下线程池的概念:
所谓线程池,就是用来帮我们创建一定数量的线程的助手,而且线程池的线程是可以重用的,
比如我代码里面定义了一个大小为13的线程池,当我需要的线程数量小于或等于13时,线程会
为我们创建小于或等于13个线程,之所以有可能是小于13是以为线程池里面的线程是可以重用的
当我们需要的线程数量大于13,线程也只能重用线程了。像我代码里里面需要23个线程,线程池
就会重用13个线程。这方面的接触得多了恐怕是我们在连接数据库使用数据源的时候了,数据源
里面就使用了线程池,线程池里面的线程负责连接数据库(创建connection对象),这就可以减少
数据库的连接与断开,节约了很多资源。
package three.day.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolTest {
private static int count = 0;
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(13);//定义个固定大小的线程池
for (int i = 1; i <= 23; i++) {//需要的线程数量大于线程池大小,线程池会重用线程
Runnable runnable = new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName() + " "
+ count++);
}
};
service.execute(runnable);
}
service.shutdown();//关闭线程池,在线程池中线程还有任务时,该语句是线程阻塞的,也就是说只有线程池中的所有线程都是空闲时,才允许关闭线程池
}
}