四种线程池的创建

线程池可以大大减少线程创建、销毁所带来的资源浪费。它可以对线程进行管理和复用。

1 newCachedThreadPool

/**
 * 创建可以缓存的线程池,如果线程长度大于预期,
 * 线程池会灵活的创建新线程和回收空闲的线程。
 */
 
public class newCachedThreadPool {
    public static void main(String[] args) {
        ExecutorService cacheThreadPool = Executors.newCachedThreadPool();
        for (int i=0 ; i < 5 ; i++){
            final int temp = i ;
            try{
                Thread.sleep(10);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
            cacheThreadPool.execute(() ->{
                System.out.println(temp);
            });
        }
    }
}

运行结果:
在这里插入图片描述

2 newFixedThreadPool

/**
 * 创建一个固定长度的线程池,如果线程大于线程池的长度,
 * 则超出范围的线程需要进入队列等待
 */
 
public class newFixedThreadPool {
    public static void main(String[] args) {
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3) ;
        for (int i=0 ; i<5 ; i++){
            final int temp = i ;
            fixedThreadPool.execute(()->{
                try {
                    System.out.println(temp);
                    Thread.sleep(10);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            });
        }
    }
}

运行结果:
在这里插入图片描述

3 newScheduledThreadPool

/**
 * 创建一个固定长度的线程池,此线程池支持定时任务和周期任务。 
 */
public class newScheduledThreadPool {
    public static void main(String[] args) {
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3) ;
        for (int i=0 ; i<5 ; i++){
            scheduledThreadPool.schedule(new Runnable() {
                @Override
                public void run() {
                    System.out.println("数五个数");
                }
            } , 5 , TimeUnit.SECONDS) ;
        }
    }
}

运行结果:

此运行结果是五秒后出来的
在这里插入图片描述

4 newSingleThreadExecutorPool

/**
 * 单线程的线程池,只用一个线程来执行程序,其他线程保存到LinkedBlockingQueue中,  
 * 保证任务按照顺序执行,优先级或者FIFO
 */
public class newSingleThreadExecutorPool {
    public static void main(String[] args) {
        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor() ;

        for (int i=0 ; i<5 ; i++){
            final int temp = i ;
            singleThreadExecutor.execute(()->{
                try{
                    System.out.println(temp);
                    Thread.sleep(2000);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            });
        }
    }
}

运行结果:
每个结果打印出来的时间相隔两秒
在这里插入图片描述

发布了56 篇原创文章 · 获赞 3 · 访问量 1199

猜你喜欢

转载自blog.csdn.net/qq_40788718/article/details/103104205