对于资源池的技术,我相信每个人都已经与数据库连接池,CONCON CO3P0,DBCP等接触,并且线程也具有相应的池,称为线程池。
Java提供了执行者类来创建线程池,例如:::
指定线程数的线程池可以通过NewFixedThreadPool()方法获得。
另一个例子:
您可以通过newsinglethreadexecutor()方法获得带有许多线程的线程池。
除了:
通过NewCachedHreadPool()方法,可以根据需要获得创建线程的线程池,该线程将根据任务数创建相应数量的线程数。
我们发现可以通过执行者类创建各种线程池,但是Alibaba Java开发手册不建议我们使用执行者类创建线程。相反,有必要手动创建:
那么如何手动创建线程池呢?
公共静态void main(string [] args){
threadpoolexecutor executor = new threadpoolexecutor(
5,
10,
5L,
timeunit.seconds,
新的Arrayblockingqueue<>(3),,,,
opecutors.defaultthreadfactory(),
new threadPoolExecutor.callerrunspolicy());
opecutor.execute(() - > {{{
System.out.println(“ Hello World”);
});
}构造ThreadPoolExecutor对象以获取线程池,但是需要指定七个参数,如下:
其中,核心线程的数量表示线程池中的核心线程。在任何情况下,它们都不会被回收。创建线程的工厂用于指定创建线程。通常,饱和策略是指处理任务。
对于一个简单的示例,现在有10个任务等待执行,因为我们的核心线程为5,因此线程池将首先创建5个线程以执行5个任务。将发布其余5个任务。任务队列,任务队列的容量仅为3个,因此任务队列只能放下3个任务。剩下的两个任务不能放入队列中,线程池将创建两个非核心线程来执行它们。时间线程池中的线程数达到最大线程数,这将触发饱和策略。例如,这里的Callerrunspolicy策略将直接丢弃新任务。