四种线程池的创建

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

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();
                }
            });
        }
    }
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值