初识线程池

作为一个java小白来说,用的线程池很多,但是好多原理并不是很清楚,趁着有点时间,研究了一下下,有问题各位大佬多多指点!!!

Java通过Executors提供四种线程池,分别为:
一,newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

这个线程池最大数量为2147483647(Interger. MAX_VALUE),我确实不敢想象啥项目能用那么多线程,但是人家自动创建,空闲一分钟销毁了,还是不错的,用它只有一点要注意,就是同时执行的任务数量不要过多,否则,由于大量线程同时运行,很有会造成系统瘫痪。

二,newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。(项目几乎都用到这个,别的没怎么涉及。)

这种是我经常用的,代码如下:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
        for (int i=0;i<10;i++){
            fixedThreadPool.execute(new Runnable() {
                public void run() {
                    try {
                        System.out.println("B当前时间="+new Date());
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
        }

我们一般是在定时任务时用到了多线程,定时任务触发时,这线程池把线程数量可以做一个限制线程最大数量就是5,如上面代码,有任务进来就创建线程,到5个就不创建了,挂了一个线程就在创建一个,根据实际项目的情况设定线程数量,我觉得很好用。三和四还没看完,看完了继续写。

三,newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

四,newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值