java在云原生时代的痛点是什么java在云原生时代的痛点是什么java在云原生时代的痛点java在云原生时代的痛点是什么是什么
Java在云原生时代会面临以下痛点:
部署和扩展的困难:在云原生环境中,应用需要快速部署、扩展和更新,而Java应用通常需要在虚拟机中运行,这可能导致部署和扩展时的延迟,管理成本也较高。
内存占用高:Java应用程序在运行时需要占用较高的内存,这会导致运行Java应用程序的虚拟机需要占用较多的资源,从而增加了与云原生环境的集成难度和成本。
限制容器化:使用容器化部署Java应用程序时,需要在容器中运行Java虚拟机。但Java虚拟机的特性和限制可能会影响容器的使用和性能表现。
性能问题:Java虚拟机会对应用程序的性能产生一定的影响,这可能导致在云原生环境中的应用性能不如预期。
解决这些痛点的方法包括优化Java应用程序的配置和部署方式,采用轻量级的Java框架,使用云原生技术(如Kubernetes)等。
万剑归宗,剑来。所有创建线程池的方法中都调用了 ThreadPoolExecutor 方法,一共有四个构造方法,只有参数不同。
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory)
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler)
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
第四个参数最多,下表格解释了每个参数分别代表的意思
corePoolSize | 核心线程数 |
maximumPoolSize | 最大线程数 |
keepAliveTime | 空闲线程存活时间 |
unit | 时间单位 |
workQueue | 任务队列 |
threadFactory | 线程工厂 |
handler | 线程拒绝策略 |
参数解释:
corePoolSize | maximumPoolSize | keepAliveTime | unit |
10 | 20 | 10 | TimeUnit.SECONDS |
前四个参数一块解释方便理解,假设赋值如上表格中的值,第一个参数10是核心线程数,而第二个参数最大线程数是20,此时会出现10个临时线程,第三个参数代表空闲临时线程可以存活的时间是10,第四个参数代表的是时间单位,表格中赋值为秒,则代表这10个临时线程在空闲状态下存活时间为10秒。下图中展示了10个核心线程和10个临时线程,核心线程的好处是只要线程池不关闭,核心线程就不会销毁。
总结:一共有20个线程,10个核心线程,10个临时线程,设置空闲临时线程销毁时间为10,单位为秒,临时线程空闲10秒之后进行销毁,核心线程只有在线程池关闭的时候进行销毁。
第五个参数 workQueue 任务队列,存放任务的容器,提交给线程池的任务都在队列中存放。
第六个参数 threadFactory 线程工厂,线程创建的工厂,此处可以选择自定义线程工厂,也可以使用默认的。
最后一个参数 handler 线程拒绝策略,顾名思义,拒绝线程访问,它一共有四种拒绝策略。