线程池是一种治理线程的资源,它能够在零碎中创立、重用和销毁线程。线程池的次要长处是缩小了创立和销毁线程的开销,进步了零碎的性能。
Java 中的线程池由 java.util.concurrent.ExecutorService
接口和它的实现类示意。ExecutorService
提供了一些用于治理线程池的办法,如 submit()
、execute()
、shutdown()
等。
5.3.1 创立线程池
Java 提供了几种创立线程池的办法:
Executors.newFixedThreadPool(int nThreads)
: 创立一个固定大小的线程池,最多能够同时运行 nThreads 个线程。Executors.newCachedThreadPool()
: 创立一个可缓存的线程池,如果线程池的以后大小超过解决需要,则回收闲暇的线程;如果须要额定线程,则创立新线程。Executors.newSingleThreadExecutor()
: 创立一个只有一个线程的线程池。Executors.newScheduledThreadPool(int corePoolSize)
: 创立一个能够定时执行工作的线程池。
5.3.2 应用线程池
咱们能够应用 ExecutorService
的submit()
或 execute()
办法将工作提交给线程池。这些工作通常是实现 java.lang.Runnable
接口或 java.util.concurrent.Callable
接口的类的实例。
Runnable
接口的工作没有返回值,而 Callable
接口的工作能够返回一个值。如果工作是 Callable
实例,咱们能够应用 submit()
办法提交工作,并取得一个 java.util.concurrent.Future
实例,该实例示意工作的后果。
示例:应用线程池执行工作
import java.util.concurrent.*;
public class ThreadPoolExample {public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(5);
// 应用 execute()办法提交 Runnable 工作
for (int i = 0; i < 5; i++) {executor.execute(new RunnableTask(i));
}
// 应用 submit()办法提交 Callable 工作
Future<Integer> future = executor.submit(new CallableTask());
try {System.out.println("CallableTask 的后果:" + future.get());
} catch (InterruptedException | ExecutionException e) {e.printStackTrace();
}
executor.shutdown();}
}
class RunnableTask implements Runnable {
private int taskId;
public RunnableTask(int taskId) {this.taskId = taskId;}
@Override
public void run() {System.out.println("RunnableTask" + taskId + "is running.");
}
}
class CallableTask implements Callable<Integer> {
@Override
public Integer call() {
int sum = 0;
for (int i = 1; i <= 100; i++) {sum += i;}
return sum;
}
}
在上述示例中,咱们创立了一个固定大小的线程池,并提交了 5 个 Runnable
工作和 1 个 Callable
工作。咱们还应用 Future
实例获取了 Callable
工作的后果。
5.3.3 敞开线程池
当咱们不再须要线程池时,应该将其敞开。能够应用 ExecutorService
的shutdown()
办法或 shutdownNow()
办法敞开线程池。shutdown()
办法会期待所有已提交的工作实现,而 shutdownNow()
办法会尝试立刻进行所有正在执行的工作。
小结
在本章节,咱们探讨了 Java 多线程与并发的“5.3 线程池”。咱们理解了如何创立线程池、如何应用线程池执行工作以及如何敞开线程池。线程池是 Java 并发编程中的重要概念,能够帮忙咱们更无效地治理线程资源,进步程序性能。
请务必多加实际,以便更好地把握这些知识点。祝你学习顺利!
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g