Java的线程池(一看就懂)

java线程池最大作用就是管理线程,控制线程数,实现高并发

首先最基本的创建线程池方式

ThreadPoolExecutor pool = new ThreadPoolExecutor(1,2,60, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>());

参数1:核心线程数

参数2:最大线程数,当任务队列满的时候,是否创建线程,创建线程的数量由他控制(最大线程数>=核心线程数)

参数3:超过核心线程数的线程空闲存活时间

参数4:时间单位

参数5:存储任务的队列,当来的任务大于核心线程数时,将任务暂存在队列中

这是创建线程最原始的方式,项目中一般都会用Executors创建线程

1.创建可变线程池    ExecutorService pool1 = Executors.newCachedThreadPool();

实现的底层是还是用ThreadPoolExecutor,只不过是固定参数而已:

new ThreadPoolExecutor(0,Integer.MAX_VALUE,60L,TimeUnit.SECONDS,new SynchronousQueue<Runnable>());

SynchronousQueue 为无缓冲队列

2.创建固定线程池   ExecutorService pool2 = Executors.newFixedThreadPool(10);    //这种方式比较常用

实现的底层是还是用ThreadPoolExecutor,核心线程数=最大线程数:

new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());

LinkedBlockingQueue(队列大小) 如果不传参数队列大小默认为 Integer.MAX_VALUE

3.创建单线程池    ExecutorService pool3 = Executors.newSingleThreadExecutor();

实现底层 核心线程数=最大线程数=1

new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()));

控制线程数为1,多余的任务入队列等待,还是用的LinkedBlockingQueue


最后执行线程池中的线程任务:

pool.execute(new Runnable());  没有返回值

pool.submit(new Callable());   有返回值

这里队列没有细说,等有时间在总结队列相关,有问题的可以进行评论,多多指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值