线程池的概念:首先创建一些线程,他们的集合成为线程池,当服务器接收到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,服务完后不关闭该线程,而是将线程还到线程池中。
在线程池的编程模式下,任务是交给整个线程池的,而不是某个线程对象。线程池拿到任务之后(线程池分配线程),它就在内部找有无空闲的线程,再把任务交给内部某个空闲的线程,一个线程某一时刻只能执行一个任务,但是我们可以同时向一个线程池提交多个任务。(大并发量的任务提交过来的时候,线程池的工作原理)
线程池的两个主要作用
1控制线程数量(避免因为创建大量的线程导致的系统崩溃)
2重用线程(避免频繁地创建销毁线程)

package threadpool;
public class Task implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"开始执行。。。");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
System.out.println("执行中断");
}
System.out.println(Thread.currentThread().getName()+"执行结束。。。");
}
}
package threadpool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Pool {
public static void main(String[] args) {
// 创建线程池对象
ExecutorService service = Executors.newFixedThreadPool(2);
// 任务请求
for (int i = 0; i < 6; i++) {
Task task = new Task();
// 将任务提交到线程中
service.execute(task);
}
// 顺序关闭
service.shutdown();
}
}
运行结果
pool-1-thread-1开始执行。。。
pool-1-thread-2开始执行。。。
pool-1-thread-1执行结束。。。
pool-1-thread-1开始执行。。。
pool-1-thread-2执行结束。。。
pool-1-thread-2开始执行。。。
pool-1-thread-1执行结束。。。
pool-1-thread-2执行结束。。。
pool-1-thread-1开始执行。。。
pool-1-thread-2开始执行。。。
pool-1-thread-1执行结束。。。
pool-1-thread-2执行结束。。。
网友评论