线程池与类加载
线程池入参:
1、corePoolSize:核心线程数,
* 核心线程就是会一直存在,即使线程有空闲的,
* 当线程数小于核心线程数时,即使有空闲的线程,线程池也会去创建新的线程,
*
2、queueCapacity:任务队列容量(阻塞队列)
* 当核心线程数达到最大时,新任务会放在队列中排队等待执行
3、maxPoolSize:最大线程数
* 当线程数》corePoolSize 且任务队列已满时,线程池会创建新的线程来处理任务
* 当线程数= maxpoolsize时,且任务队列已满时,线程池会执行拒绝策略
4、keepAliveTime:线程空闲时间
* 当线程空闲时间达到设置值时,线程会退出,直到达到核心线程数
5、 allowCoreThreadTimeOut
* 允许核心线程超时时间
6、rejectExecutionHandleer:达到最大线程时拒接策略
1、丢弃任务,抛出异常
2、用当前线程执行任务
3、忽略当作什么事都没有发生
4、从队列中剔除最早进入的任务
为啥类加载器三层结构:加载区域不同,
1、引导类加载器 bootstrap class loader
- 用来加载java_home/jre/rt.jar 或者是sun.boot.class.path路径下的内容
- 加载扩展类和应用程序类加载器,并制定他们的父加载器
2、扩展类加载器
- 用来加载java 扩展库(java_home/jre/ext/*.jar 或者java.ext.dirs路径下的内容)
3、应用程序类加载器 application class loader
- 根据java应用的类路径 一般应用程序类都是它来加载完成,有AppClassLoader 实现
自定义类加载器:
- 实现classLoader类的方式
双亲委托机制
-- 一个类加载器在加载一个类的时候,先让父类加载去加载,只有父类加载不了的,自己才会去加载, 双亲委托机制,保证一个类智能加载一次,保证了核心库的安全,(比如用户写了Object类),
#随笔#
1、corePoolSize:核心线程数,
* 核心线程就是会一直存在,即使线程有空闲的,
* 当线程数小于核心线程数时,即使有空闲的线程,线程池也会去创建新的线程,
*
2、queueCapacity:任务队列容量(阻塞队列)
* 当核心线程数达到最大时,新任务会放在队列中排队等待执行
3、maxPoolSize:最大线程数
* 当线程数》corePoolSize 且任务队列已满时,线程池会创建新的线程来处理任务
* 当线程数= maxpoolsize时,且任务队列已满时,线程池会执行拒绝策略
4、keepAliveTime:线程空闲时间
* 当线程空闲时间达到设置值时,线程会退出,直到达到核心线程数
5、 allowCoreThreadTimeOut
* 允许核心线程超时时间
6、rejectExecutionHandleer:达到最大线程时拒接策略
1、丢弃任务,抛出异常
2、用当前线程执行任务
3、忽略当作什么事都没有发生
4、从队列中剔除最早进入的任务
为啥类加载器三层结构:加载区域不同,
1、引导类加载器 bootstrap class loader
- 用来加载java_home/jre/rt.jar 或者是sun.boot.class.path路径下的内容
- 加载扩展类和应用程序类加载器,并制定他们的父加载器
2、扩展类加载器
- 用来加载java 扩展库(java_home/jre/ext/*.jar 或者java.ext.dirs路径下的内容)
3、应用程序类加载器 application class loader
- 根据java应用的类路径 一般应用程序类都是它来加载完成,有AppClassLoader 实现
自定义类加载器:
- 实现classLoader类的方式
双亲委托机制
-- 一个类加载器在加载一个类的时候,先让父类加载去加载,只有父类加载不了的,自己才会去加载, 双亲委托机制,保证一个类智能加载一次,保证了核心库的安全,(比如用户写了Object类),
#随笔#