java多线程:线程池
线程池
-
背景:经常创建和销毀、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。
-
思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毀,实现重复利用。类似生活中的公共交通工具。
-
好处:
- 提高响应速度(减少了创建新线程的时间)
- 降低资源消耗(重复利用线程池中线程,不需要每次都创建
- 便于线程管理:
- corePoolSize:核心池的大小
- maximumPoolSize:最大线程数
- keepAliveTime:线程没有任务时最多保持多长时间后会终止
-
JDK5.0起提供了线程池相关API :ExecutorService和 Executors
-
ExecutorService:真正的线程池接口。常见子类ThreadPoolExecutor
void execute(Runnable command): 在将来某个时间执行给定任务。 没有返回值,一般用来执行Runnable<T>Future<T> submit(Callable<T> task):提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。 一般用来执行Callablevoid shutdown():按过去执行已提交任务的顺序发起一个有序的关闭,但是不接受新任务。关闭连接池
-
Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池
public static ExecutorService newFixedThreadPool(int nThreads):创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程
//测试线程池 public class TestPool { public static void main(String[] args) { //1.创建服务,创建线程池 //newFixedThreadPool参数为线程池大小 ExecutorService service = Executors.newFixedThreadPool(10); //执行 service.execute(new MyThread()); service.execute(new MyThread()); service.execute(new MyThread()); service.execute(new MyThread()); //2.关闭连接 service.shutdown(); } } class MyThread implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()); } } //pool-1-thread-2 //pool-1-thread-3 //pool-1-thread-4 //pool-1-thread-1

浙公网安备 33010602011771号