之前都是把线程创建后,使用完就销毁,性能差
思路:提前创建多个线程,放入线程池,使用时直接获取,使用完放回池子;避免频繁创建销毁
使用线程池:ExecutorService 和 Executors
ExecutorService: 真正的线程池接口,常见子类: ThreadPoolExecutor
(1) void execute(Runnable command): 执行任务/命令,没有返回值,用于执行Runnable
(2) <T> Future<T> submit(Callable<T> task):执行任务,有返回值,用于执行Callable
(3) void shutdown() 关闭连接池
Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestPool {
public static void main(String[] args) {
// 1.创建服务,创建线程池 --> 容易导致内存泄露
ExecutorService service = Executors.newFixedThreadPool(10); // newFixedThreadPool() 设置线程池大小
// 执行
service.execute(new MyThread());
service.execute(new MyThread());
service.execute(new MyThread());
service.execute(new MyThread());
// 关闭连接
service.shutdown();
}
}
class MyThread implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
除此之外的参数还有:corePoolSize: 核心池的大小
maximumPoolSize 最大线程数
keepAliveTime 线程没有任务时最多保持多久终止线程池
等等...