创建线程池的常用三种方法

package ThreadPool;

import java.util.concurrent.*;

/**
 * 创建线程池的三种常用方法
 */
public class ThreadPoplDemo {
    public static void main(String args[]) {
        CreateThreadPool1 ();
    }


    public static void CreateThreadPool1 (){
        //线程池里面的线程用完以后,还给线程池,不关闭;
        ExecutorService service = new ThreadPoolExecutor(
                /**
                 * 核心线程数,当线程池初次创建时,是没有任何线程的;当有
                 * 请求发起时,线程池会创建核心线程, 在球球过程中,无论核
                 * 心线程是否闲置,线程池都会创建核心线程,知道满足数量为止
                 */
                5,
                /**
                 * 最大线程数,先有的核心线程,后面创建的为临时线程
                 */
                10,
                /**
                 * 存活时间。临时线程的存活时间,就是指临时线程闲置后的时间,时间一到就会销毁线程;
                 */
                3000,
                /**
                 * 时间单位,一般用毫秒
                 */
                TimeUnit.MILLISECONDS,
                /**
                 * 等待队列,用于存放还会处理的请求;
                 */
                new ArrayBlockingQueue<Runnable>(10),
                /**
                 * 拒绝服务器助手
                 */
                new RejectedExecutionHandler() {
                    @Override
                    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                            System.out.print("请稍后尝试");
                    }
                }
        );
        //通过线程池启动线程
        for (int i = 0;i<21;i++) {
            service.execute(new ClientRunble());
        }
        /**
         * 关闭线程池,当调用这个方法时,里面的线程不会立即销毁,只是不接受外部请求;
         * 只有内部的线程处理完后,才会销毁,使用线程池的好处是避免线程的频繁创建何销毁;
         * 从而节省cpu性能;
         */
        service.shutdown();
    }


    public  static void  CreateThreadPool2(){
        /**
         * 此种方法也可以创建线程池,但是此方法创建的线程池没有核心线程;
         * 只有临时线程;
         * 队列是同步队列;
         * 最大线程数无界;
         * 可以很好的响应客户端请求,大池子,小队列;
         * 因为不需要排队等待;
         * 这种线程池适用于短请求,如果都是长请求,可能导致线程一直创建二不销毁,最后造成内存溢出;
         *
         */
        ExecutorService service = Executors.newCachedThreadPool();
    }

    public void CreateThreadPool3(){
        /**
         *  小池子大队列:
         *  1.都是核心线程,没有临时线程;
         *  2.队列是无界队列,LinkedBlockingQueue<Runnable>()
         *  3.应用场景:这种线程池的作用:消峰限流。
         *  4.坏处:某些请求可能等待很长时间才处理,不能及时响应客户端;
         */
        ExecutorService service = Executors.newFixedThreadPool(10);

    }
}


class ClientRunble implements Runnable{

    @Override
    public void run() {
        System.out.println("处理客户请求");
        try {
            Thread.sleep(Integer.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

synda@hzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值