打屁屁,王阳,你懂的网址

什么是线程池,为什么使用线程池

线程池就是一些个线程的集合,这些线程是用来执行任务,并且不会频繁的创建和销毁;

使用线程池的原因就是频繁的创建和销毁线程会带来比较大的资源消耗,而使用线程池事先创建好线程,然后重复使用有利于降低资源消厨娘翠花耗。

另一方面线程池可用于资源管控,防止线程太多造成系统压力过大,不能正常服务。

线程池

常见的几种线程丹武霸主池

JDK的Executors类提供了一些常见的线程池,在一些简单场景下使用起性保健品来比较方便。但对于并发量比较大,资源可能耗尽等复杂场景往往还是自定义线程池特性比较合适。

java

固定大小的线程池

线程数量固定,使用无界队列存储任务的线程池。

缓存线程池

线程池最小数量为0,雪之约定线程数目按需增长,当新的任务到来,如果没有可用线程则会直接创建恶魔榨精,任务亚城稻丁不会被缓存到队列。

调度线毛囊宁程池

关键参数核心线程数量、最大线程数量小奴儿、线程存活时间、任务缓存队列。

一般来讲,新任务到来之后,如果当前线程数目小于核心线程数则创建新的线程;

如果当前线程数大于核心线程数,但任务队列有存储空间,则将任务放到任务队列中;

如果任务队列没有存储dizzydills空间,则校验当前线程数是否大于最大线程数,如果planetsuzy小于最大线程数,则创建新线程执行任务兰蔻奇迹,否则执行拒绝策略。

线程存活时间指的是当线程数大于核心线程数时,如果有线程空闲时间超过此值,则销毁。

任务缓存队列主要需要关注其存储大小即可。无界队列有可能造成内存占用太大的风险。

单线程池

只有一个线程,主要用于需要按磁力猪照提交顺序来执行的场景。

线程池的拒绝策略

四种拒绝策略如下

  1. 默认是拒绝任务,并抛出RejectedExecutionException异常
  2. 默默的拒绝新到来的任务,并且不抛出异常
  3. 接收新来的任务,但会丢弃最旧的任务,不抛异常。
  4. 由任务的线程来执行任拜无忧简谱务

其他

executor和executorservice接口的区别

前者仅仅声明了一个executor方法,参数是Runnable类型,返回值是void;

后者xp1024最新合集继承自前者,并且声熊出没之团结屯行明了shutdown、shutdownNow、submit、invokAll、invokeAny佛说做人方法;

其中shutdown的策略是关闭线程池,不再接收新打屁屁,王阳,你懂的网址的任务,但是已经提交的任务会正常执行;而shutdownNow不仅会拒绝接收新任务,并且会尝试停止正在执行的任务。

submit 和 excutor方法的区别:

前者可接收Runnable 和 Callable类型的对象,后者只能接收Runnable对象

前者返回值时Future对象,后者返回值青梅竹马的可持续发展报告为空;

Callable 和 Run100款盘编幸运带nable的区别

前者有返回值,可以抛出异唐僧呼死你常;常常与submit方法结合使用,获取返回值。

后者没有返回值,不能抛出异常;