5.4 线程池

打印 上一主题 下一主题

主题 526|帖子 526|积分 1578

线程池是一种管理线程的资源,它可以在系统中创建、重用和销毁线程。线程池的主要优点是减少了创建和销毁线程的开销,提高了系统的性能。
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实例,该实例表示任务的结果。
示例:使用线程池执行任务
[code]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 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 {    @Override    public Integer call() {        int sum = 0;        for (int i = 1; i
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表