线程池的好处
1. 降低资源消耗。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
2. 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
3. 提高线程的可管理性。可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)
- 线程池的工作原理:
- 线程池被创建,就会初始化指定数量的线程
- 往线程池中添加任务:
- 如果线程池中有多条空闲的线程,那么就会随机分配线程来执行任务
- 如果线程池中没有空闲的线程,那么添加的任务就在任务队列中进行等待,当有线程执行完任务,空闲下来了,就会分配空闲线程来执行等待的任务
public class MyCallable implements Callable<Integer> { int num; public MyCallable(int num) { this.num = num; } @Override public Integer call() throws Exception { int sum = 0; for (int i = 1; i <= num; i++) { sum += i; } return sum; } }
public class Test {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 需求:使用线程池方式执行任务,返回1-n的和
// 创建线程池,初始化指定数量的线程
ExecutorService es = Executors.newFixedThreadPool(2);
// 创建任务
MyCallable mc = new MyCallable(100);
// 提交任务,执行任务
Future<Integer> f = es.submit(mc);
// get(): 可以获取线程执行完任务后返回的结果
System.out.println("1-100的和:"+f.get());
}
}
原文:https://www.cnblogs.com/-star/p/13369295.html