小伙伴们知道线程池吗?这是java中的一种线程处理形式,你知道线程池原理是都有哪些吗?快跟小编来看看吧。
一、什么是线程池?
说白了其实线程池就是一种多线程的处理形式,在你的处理的过程当中,会把任务插入到队列当中,之后,在创建线程的时候,主动的启动任务,每一个线程都使用默认的堆栈大小,以默认的优先级运行,并且,处在多线程单元当中。
就好比某一个线程在托管代码当中空闲,那么,线。程池将会插入另一个辅助线程来使得所有处理器保持繁忙
假如,所有的线程池都一直是保持繁忙,可是队列当中包含挂起的工作,那么,线程池将会在一段时间以后,辅助线程的数目就永远不会超过最大值。
线程假如是超过最大值,那么就要排队,但是,它们要等到其他的线程完成之后,才能够启动。
java里面的线程池的顶级接口是Executor。
注:Executor并不是一个线程池,它只是一个执行线程的工具。
真正的线程池是ExecutorService。
线程池的主要思想:
在进程开始时创建一定数量的线程,并加到池中以等待工作。
在服务器收到请求时,它会唤醒池内的一个线程(假如有可用的线程),并将需要服务的请求传递给它。
只要线程完成了服务,那么它就会返回到池中再等待工作。
假如,池内没有可以用的线程,那么服务器就会等待,一直等到有空线程为止。
二、线程池原理是什么?
1、判断线程池里的核心线程是不是都在执行任务。
假如不是或者是核心线程空闲又或者是还有核心线程没有被创建的话,就创建一个新的工作线程来执行任务。
假如,核心线程都在执行任务,就进入下个流程。
2、线程池会判断工作队列是不是已经满了。
假如,工作队列没有满,那么,就将新提交的任务存储在这个工作队列里。
假如,工作队列满了,进入下个流程。
3、判断线程池里的线程是不是都处于工作状态。
要是没有的话,那么就,创建一个新的工作线程来执行任务。
假如,满了的话,那么就交给饱和策略来处理这个任务。
以上就是关于线程池的一些简单介绍了,如果还想了解更多相关java常见问答知识就请持续关注我们网站吧。
推荐阅读: