1、缓存型的
特点:线程池无限大,当处理第二个线程时若第一个处理完,则会继续使用第一个线程,并且该线程池如果长度超过处理需要,可以收回空闲线程,反之,则新建线程
2、固定大小的
特点:线程池大小固定,如果线程池大小为3,(也就是每次同时只能处理三个,超出三个之外的就需要等待)
3、任务型的
特点:当实现的是scheduleAtFixedRate或者schedule时,支持定时和周期性任务,如果实现的是execute的话则为普通线程池可自定义线程池大小
4、单线程线程池
特点:单线程的线程池,一次最大处理量为了,超过的需要等待,不能定义线程池大小
四种线程池的特点的演示代码如下: - package test;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.ScheduledExecutorService;
- import java.util.concurrent.TimeUnit;
- public class Thread_test {
- static ExecutorService es = Executors.newCachedThreadPool();
- //static ExecutorService es = Executors.newFixedThreadPool(3);
- //static ExecutorService es = Executors.newScheduledThreadPool(3);
- //static ExecutorService es = Executors.newSingleThreadExecutor();
- public static void doTest() {
- // (CachedThreadPool,FixedThreadPool)
- es.execute(new Runnable() {
- public void run() {
- System.out.println("执行了--");
- try {
- Thread.sleep(2000);//线程休眠2秒
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- });
- // (ScheduledThreadPool)
- // ((ScheduledExecutorService) es).scheduleAtFixedRate(new Runnable() {
- // int i=1;
- // @Override
- // public void run() {
- //
- // int time=3*i;
- // System.out.println("距离第一次打印已经过了"+time+"秒");
- // i++;
- // }
- // //}, 3, TimeUnit.SECONDS);//延迟三秒执行(定时执行的方法为schedule)
- // }, 1, 3, TimeUnit.SECONDS);//每三秒执行一次
- }
- public static void main(String[] args) {
- for (int i = 0; i < 12; i++) {
- doTest();
- }
- }
- }
|
|