它是线程的容器,或者(换句话说,它是具有执行任务能力的线程的集合)。
我们可以使用ThreadPool框架来定位(或实现)线程池。
线程池可以包含多个线程。每当我们执行任何任务时,线程就会从线程池中出来并完成该任务,然后再次返回线程池。
如果您不使用线程池,那么...
您需要一次又一次地创建重复的线程,并且每次都会浪费内存并破坏对象,从而降低性能。如果请求数量增加/减少,那么我们需要创建更多数量的线程。
如果您使用线程池,那么...
您不需要一次又一次地创建重复的线程,也不会浪费内存,也不必每次都销毁对象,因此性能将得到提高。
如果请求数量增加/减少,那么我们不需要创建更多线程。
示例
ThreadPool包含100个线程,请求数为200,然后将有100个请求解决第一个100个请求,然后在完成任务线程后将释放它们并返回线程池,然后有100个线程将解决下一个100个请求。
在线程池中,我们可以讨论三件事:
如何创建一个ThreadPool?
如何向线程池中的线程提交任务?
如何关闭线程池?
让我们看看如何创建线程池,
ExecutorService es = Executors.new FixedThreadPool(int);
int是线程池中的线程数
让我们看看如何使用来向线程池中的线程提交任务submit()
。
ExecutorServiceObject (es) => es.submit(Runnable obj);
让我们看看如何关闭threadPool?
ExecutorServiceObject (es) => es.shutdown();
示例
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; class ThreadPoolClass implements Runnable{ String s; ThreadPoolClass(String str){ s = str; } public static void main(String[] args){ ExecutorService es = Executors.newFixedThreadPool(1); es.submit(new ThreadPoolClass("First Name: Preeti")); es.submit(new ThreadPoolClass("Second Name: Jain")); es.shutdown(); } public void run(){ System.out.println(Thread.currentThread()+ s); } }
输出结果
D:\Java Articles>java ThreadPoolClass Thread[pool-1-thread-1,5,main]First Name: Preeti Thread[pool-1-thread-1,5,main]Second Name: Jain