线程池的作用的:
在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程
第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
第三:提高线程的可管理性。
常用线程池:ExecutorService 是主要的实现类,其中常用的有 :
Executors.newSingleThreadExecutor()
newFixedThreadPool()
newCachedThreadPool()
代码演示:
package com.zhangye;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class ThreadPoolExecutor {
public static void main(String[] args) {
Executor executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); //固定长度线程池,Runtime.getRuntime().availableProcessors() 是获取cpu核数
Executor executor2 = Executors.newSingleThreadExecutor(); //一个线程的线程池
Executor executor3 = Executors.newCachedThreadPool(); //不固定长度线程池,最大线程数为Integer.MAX_VALUE
for (int i = 1; i <= 10; i++) {
executor.execute(()->{
System.out.println(Thread.currentThread().getName()+"\t 生产苹果");
});
}
for (int i = 1; i <= 10; i++) {
executor2.execute(()->{
System.out.println(Thread.currentThread().getName()+"\t 生产香蕉");
});
}
for (int i = 1; i <= 30; i++) {
executor3.execute(()->{
System.out.println(Thread.currentThread().getName()+"\t 生产葡萄");
});
}
}
}
executor打印结果,CPU是6核的,6个线程在处理
pool-1-thread-1 生产苹果
pool-1-thread-4 生产苹果
pool-1-thread-3 生产苹果
pool-1-thread-2 生产苹果
pool-1-thread-3 生产苹果
pool-1-thread-6 生产苹果
pool-1-thread-4 生产苹果
pool-1-thread-5 生产苹果
pool-1-thread-1 生产苹果
pool-1-thread-2 生产苹果
executor2打印结果,创建的是单个线程的线程池,只有一个线程处理
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
executor3打印结果,不固定长度的线程池,需要多少就创建多少
pool-3-thread-1 生产葡萄
pool-3-thread-5 生产葡萄
pool-3-thread-4 生产葡萄
pool-3-thread-3 生产葡萄
pool-3-thread-2 生产葡萄
pool-3-thread-6 生产葡萄
pool-3-thread-8 生产葡萄
pool-3-thread-7 生产葡萄
pool-3-thread-6 生产葡萄
pool-3-thread-3 生产葡萄
pool-3-thread-6 生产葡萄
pool-3-thread-12 生产葡萄
pool-3-thread-4 生产葡萄
pool-3-thread-3 生产葡萄
pool-3-thread-3 生产葡萄
pool-3-thread-1 生产葡萄
pool-3-thread-15 生产葡萄
pool-3-thread-9 生产葡萄
pool-3-thread-8 生产葡萄
pool-3-thread-5 生产葡萄
pool-3-thread-2 生产葡萄
pool-3-thread-16 生产葡萄
pool-3-thread-4 生产葡萄
pool-3-thread-14 生产葡萄
pool-3-thread-13 生产葡萄
pool-3-thread-12 生产葡萄
pool-3-thread-6 生产葡萄
pool-3-thread-10 生产葡萄
pool-3-thread-11 生产葡萄
pool-3-thread-7 生产葡萄