您当前的位置:首页 > 生活 > 内容

threadpoolexecutor(用过哪些线程池,区别,threadpoolexecutor各个参数意义是什么,使用场景)

线程池采用的策略如下(即添加任务的策略):1、如果此时线程池中的数量小于corePoolSize,3、如果此时线程池中的数量大于corePoolSize,4、如果此时线程池中的数量大于corePoolSize,并且线程池中的数量小于maximumPoolSize,而因为你的action继承了ActionSupport,ActionSupport里面有execute方法默认返回success.所以程序还是能被正常执行关于ThreadPoolExecutor线程池,ThreadPoolExecutor线程池:系统中,并且线程池中的数量等于maximumPoolSize,2、如果此时线程池中的数量等于corePoolSize。

用过哪些线程池,区别,threadpoolexecutor各个参数意义是什么,使用场景

线程是一个操作系统概念。操作系统负责这个线程的创建、挂起、运行、阻塞和终结操作。而操作系统创建线程、切换线程状态、终结线程都要进行CPU调度——这是一个耗费时间和系统资源的事情。 另一方面,大多数实际场景中是这样的:处理某一次请求的时间是非常短暂的,但是请求数量是巨大的。这种技术背景下,如果我们为每一个请求都单独创建一个线程,那么物理机的所有资源基本上都被操作系统创建线程、切换线程状态、销毁线程这些操作所占用,用于业务请求处理的资源反而减少了。所以最理想的处理方式是,将处理请求的线程数量控制在一个范围,既保证后续的请求不会等待太长时间,又保证物理机将足够的资源用于请求处理本身。

struts2 问题,action继承了ActionSupport,没有重新execute()方法,也没有用method指定方法,这样行吗

action继承了ActionSupport,而在struts2里已经默认指定了,如果你没有在struts.xml中指定method,那么系统就会调用execute()。而因为你的action继承了ActionSupport,ActionSupport里面有execute方法默认返回success.所以程序还是能被正常执行

关于ThreadPoolExecutor线程池,该怎么处理

用线程池编写多线程程序时,当所有任务完成时,要做一些统计的工作。而统计工作必须要在所有任务完成才能做。所以要让主线程等待所有任务完成。可以使用ThreadPoolExecutor.awaitTermination(long timeout, TimeUnit unit)。

ThreadPoolExecutor线程池

当我们需要实现并发、异步等操作时,可以使用ThreadPoolExecutor。

ThreadPoolExecutor

线程池:

系统中,我们创建(extend Thread/implement Runnable)、销毁(正常run方法完成后线程终止)线程的代价是比较高昂的。如果频繁地创建和销毁进程,会大大降低系统运行效率和吞吐量。线程池使得线程可以被复用,避免了线程频繁创建和销毁的开销,提高系统的运行效率和吞吐量。

实例

ThreadPoolExecutor.execute(new Runnable () {});

相关概念:

Task任务:new Runnable () {}任务就是一个Runnable的对象,任务的执行方法就是该对象的run方法。

缓冲队列:workQueue

一个阻塞队列。

BlockingQueue《Runnable》 workQueue;

corePoolSize:核心线程数核心线程会一直存活,即使没有任务需要执行。当线程数小于核心线程数时(还未满,就会一直增),即使有线程空闲,线程池也会优先创建新线程处理。

maxPoolSize:最大线程数当线程数大于corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务,直到线程数量达到maxPoolSize。

execute(Runnable)

通过execute将一个任务交由线程池管理。

当一个任务通过execute方法欲添加到线程池时,线程池采用的策略如下(即添加任务的策略):

1、如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。

2、如果此时线程池中的数量等于corePoolSize,但是缓冲队列workQueue未满,那么任务被放入缓冲队列。

3、如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。

4、如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过handler所指定的策略来处理此任务。

如下图:

希望对您有所帮助!~


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 跳跳僵尸用什么对付(跳跳僵尸)

下一篇: 为什么不能送枕头(为什么不能送枕头有什么忌讳吗)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号