公司做网站 微信平台,网站icp备案信息,wordpress更新服务器,乐山市建设局官方网站文章目录 线程池案例参数说明取值策略 线程池
使用一个线程池用于维护线程#xff0c;可以避免频繁的进行线程创建与销毁造成的浪费。需要使用线程的时候从线程池中取出就可以了。
案例
public class ExecutorDemo {public static void main(String[] args) {int corePoolS… 文章目录 线程池案例参数说明取值策略 线程池
使用一个线程池用于维护线程可以避免频繁的进行线程创建与销毁造成的浪费。需要使用线程的时候从线程池中取出就可以了。
案例
public class ExecutorDemo {public static void main(String[] args) {int corePoolSize 5;int maximumPoolSize 10;long keepAliveTime 1000;TimeUnit unit TimeUnit.SECONDS;ThreadPoolExecutor threadPoolExecutor new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, new LinkedBlockingDeque());for (int i 0; i 10; i){threadPoolExecutor.submit(() - {System.out.println(Thread.currentThread().getName() 正在执行);});}threadPoolExecutor.shutdown();}
}一般创建线程池都使用 ThreadPoolExecutor可以更加灵活的控制参数灵活的使用线程池。
参数说明
核心线程数corePoolSize线程池的核心线程数最大线程数maximumPoolSize线程池的最大线程数存活时间keepAliveTime超过核心线程数小于最大线程数的线程的存活时间时间单位存活时间的时间单位。堵塞队列blockedQueue,多余的任务排队拒绝策略Handler
线程池维护 corePoolSize 的线程当有超过该线程数的任务时会被放在堵塞队列中等待如果任务太多堵塞队列也满了的话会判断当前的线程数是否小于最大的线程数是的话就会继续创建线程。
当执行完成后大于核心线程数的线程的达到存活时间后会进行销毁。
取值策略
核心线程数corePoolSize线程池的核心线程数
I/O 密集型使用对网络直接的传输输入输出对数据库操作等这个操作可以设置较大的线程池数量。
CPU密集型计算机应用的类型为了可以充分的发挥CPU线程池的数量一般为CPU的核的个数或倍数。
一般的情况下假如CPU的核心数量为 N CPU 密集型可以设置为 N 1
I/O 密集型可以设置为 N 的倍数.
最大线程数maximumPoolSize线程池的最大线程数
搭配核心线程数保持应用使用的线程数不会超出系统的上限。
一般与核心线程池的数量相当。
不过具体的数量还是要根据实际的业务逻辑以及测试所得。
存活时间keepAliveTime超过核心线程数小于最大线程数的线程的存活时间
使用超过核心线程数的存放时间一般短的任务可以设置较短的存活时间长的任务设置较长的存放时间。
时间单位存活时间的时间单位。
这个搭配存活时间使用一般有毫秒秒分钟。 堵塞队列多余的任务如何排队有界的阻塞队列一般使用 LinkedBlockQueue。无界的使用 sychronousQueue。 拒绝策略hander当任务太多可以触发拒绝策略 我是小辉24 届毕业生。当下是找工作ing欢迎关注持续分享。