常量池线程池连接池各是什么,优点及特点是什么

2021 11 12 线程池,字符串常量池,数据库连接池

各位老铁们,大家好,今天由我来为大家分享常量池线程池连接池各是什么,优点及特点是什么,以及为什么不建议用线程池的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

本文目录

  1. 线程池能处理多少个任务
  2. 常量池线程池连接池各是什么,优点及特点是什么
  3. JAVA架构之线程池是怎样工作的
  4. lf线程池是什么

线程池能处理多少个任务

2048个任务,创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。

为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,JavaAPI提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池)。

常量池线程池连接池各是什么,优点及特点是什么

线程池就是申请固定数目的线程,放在某个空间中。

当申请线程时,就从线程池中取得。当线程池中的线程都被占用的时候,无法获取到新的线程。连接池是数据库连接池,跟线程池原理一样。目的都是一样的,防止链接过多造成压力。

JAVA架构之线程池是怎样工作的

谢谢邀请!下面介绍一下线程池是怎样工作的?

ThreadPoolExecutor的类关系如下:

Executor是一个接口,它是Executor框架的基础,它将任务的提交与任务的执行分离开来。

ExecutorService接口继承了Executor,在其上做了一些shutdown()、submit()的扩展,可以说是真正的线程池接口;

AbstractExecutorService抽象类实现了ExecutorService接口中的大部分方法;

threadPoolExecutor是线程池的核心实现类,用来执行被提交的任务。

ScheduledExecutorService接口继承了ExecutorService接口,提供了带"周期执行"功能ExecutorService;

ScheduledThreadPoolExecutor是一个实现类,可以在给定的延迟后运行命令,或者定期执行命令。ScheduledThreadPoolExecutor比Timer更灵活,功能更强大。

定义线程池

线程池的创建各个参数含义及流程如下:

1、corePoolSize

①线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize;

②如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行;

③如果执行了线程池的prestartAllCoreThreads()方法,线程池会提前创建并启动所有核心线程。

2、maximumPoolSize

线程池中允许的最大线程数。如果当前阻塞队列满了,且继续提交任务,

则创建新的线程执行任务,前提是当前线程数小于maximumPoolSize

3、keepAliveTime

线程空闲的存活时间,即当线程没有任务执行时,继续存活的时间。

默认情况下,该参数只在线程数大于corePoolSize时才有用。

4、TimeUnit

keepAliveTime的时间单位。

5、WorkQueue

用于保存等待执行的任务的阻塞队列,一般来说,我们应该尽量使用有界队列,因为使用无界队列作为工作队列会对线程池做如下影响。

①当线程池中的线程数达到corePoolSize后,新任务将在无界队列中等待,因此线程池中的线程数不会超过corePoolSize。

②由于1,使用无界队列时maximumPoolSize将是一个无效参数。

③由于1和2,使用无界队列时keepAliveTime将是一个无效参数。

④更重要的,使用无界queue可能会耗尽系统资源,有界队列则有助于防止资源耗尽,同时即使使用有界队列,也要尽量控制队列的大小在一个合适的范围。

所以我们一般会使用,ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue。

6、threadfactory

创建线程的工厂,通过自定义的线程工厂可以给每个新建的线程设置一个具有识别度的线程名,

当然还可以更加自由的对线程做更多的设置,比如设置所有的线程为守护线程。

Executors静态工厂里默认的threadfactory,线程的命令规则时"pool-数字-thread-数字"

7、RejectedExecutionHandler拒绝策略

线程池的饱和策略,当阻塞队列满了,且没有空闲的工作线程,如果继续提交任务,必须采取一种策略处理该任务,线程池提供了4种策略:

①AbortPolicy:直接抛出异常,默认策略

②CallerRunsPolicy:用调用者所在的线程来执行任务

③DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务

④Discardpolicy:直接丢弃任务

当然也可以根据应用场景实现RejectedExecutionHandler接口,自定义饱和策略,如记录日志或持久化存储不能处理的任务。

线程池的工作机制

①如果当前运行的线程少于corePoolSize,则创建新线程来执行任务

②如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQueue

③如果无法将任务加入BlockingQueue(队列已满),则创建新的线程来处理任务。

④如果创建新线程将使当前运行的线程超出maximumPoolSize,任务将被拒绝,

并调用RejectedExecutionHandler.rejectedExecution()方法。

lf线程池是什么

lf线程池是一种多线程处理形式

关于常量池线程池连接池各是什么,优点及特点是什么,为什么不建议用线程池的介绍到此结束,希望对大家有所帮助。

mysql连接池专题及常见问题 CSDN

本文内容来自互联网,若需转载请注明:https://bk.66688891.com/12/97507.html