移动互联网 网站建设seo关键词优化外包
线程池 是 一个 容器,其中管理着多个线程(预先创建并维护一定数量的线程),当有一个任务a需要一个线程去完成时,从容器(线程池)中获取一个线程A去执行任务a,当线程A完成任务a后,线程A又回到容器中。
(公司招聘10个员工(线程),他们在各种的工位上等待分配任务,
当有一个任务出现时,选取一名员工去执行任务,当他将任务执行完毕后又回到自己的工位等待下一个任务)
而不是
(公司有任务需要做,于是招聘一个员工去完成该任务,当任务完成后,该员工离开公司,下次再有任务时又招聘新的员工)
节约了线程创建和销毁的开销。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ThreadPoolExample {public static void main(String[] args) {// 创建一个固定大小为 5 的线程池ExecutorService executor = Executors.newFixedThreadPool(5);// 提交任务给线程池执行for (int i = 0; i < 10; i++) {executor.execute(new Task(i));}// 关闭线程池executor.shutdown();}
}class Task implements Runnable {private int taskId;public Task(int id) {taskId = id;}@Overridepublic void run() {System.out.println("Task #" + taskId + " is running in Thread #" + Thread.currentThread().getId());}
}
首先创建了一个固定大小为 5 的线程池。然后使用一个循环提交了 10 个任务给线程池执行,每个任务都是一个实现了Runnable接口的对象。当任务被线程池执行时,它们会输出自己的编号和线程的编号。最后我们通过调用 shutdown() 方法关闭线程池。
Executors
是一个工厂类,可以通过它来创建各种类型的线程池
newFixedThreadPool(int nThreads)
:创建一个固定大小的线程池,池中有固定数量的线程;newSingleThreadExecutor()
:创建只有一个线程的线程池;newCachedThreadPool()
:创建一个可根据需要创建新线程的线程池等。
ExecutorService
是一个接口,它扩展了Executor
接口,具有更完整的线程池控制方法,并且支持提交可返回结果的任务(Callable)。通过使用ExecutorService
,我们可以方便地提交任务、关闭线程池、管理任务执行流程并获取任务执行结果。在实际应用中,我们通常通过
Executors
创建一个线程池,然后将任务通过ExecutorService
提交给线程池执行。