一、背景
经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。
如果我们提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。
线程池实现图示:

二、线程池方法
JDK5.0起提供了线程池相关API:ExecutorService和Executors
- ExecutorService:线程池接口。
1、void execute(Runnable command):执行任务/命令,没有返回指,一般用来执行Runnable
2、 Future submit(Callable task):执行任务,有返回指,一般用来执行Callable
3、void shudown():关闭连接池
-
Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池。
ExecutorService newFixedThreadPool(int nThreads):创建一个指定线程数的线程池
三、代码示例
- Runnable接口的线程:
public class ThreadDemo5 {
public static void main(String[] args) {
// 创建线程池
ExecutorService es = Executors.newFixedThreadPool(10);
// 执行
es.execute(new T1());
es.execute(new T1());
es.execute(new T1());
// 关闭线程池
es.shutdown();
}
}
class T1 implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
输出:

- Callable接口的线程:
public class ThreadDemo6 {
public static void main(String[] args) {
// 创建线程池
ExecutorService es = Executors.newFixedThreadPool(10);
// 执行
es.submit(new T2());
es.submit(new T2());
es.submit(new T2());
// 关闭线程池
es.shutdown();
}
}
class T2 implements Callable<Boolean> {
@Override
public Boolean call() {
System.out.println(Thread.currentThread().getName());
return true;
}
}
输出结果是一样的,都成功启动了3个线程。
本文介绍了Java中线程池的概念,强调了使用线程池避免频繁创建销毁线程以提高性能的重要性。讲解了ExecutorService接口的主要方法,如execute()和submit(),以及Executors工具类提供的newFixedThreadPool()方法用于创建固定大小的线程池。同时,通过代码示例展示了如何使用Runnable和Callable接口创建并执行线程任务。
861

被折叠的 条评论
为什么被折叠?



