Java多线程之Executor框架.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
一、为什么要引入Executor框架? 1、如果使用new Thread(…).start()的方法处理多线程,有如下缺点: ① 开销大。对于JVM来说,每次新建线程和销毁线程都会有很大的开销。 ② 线程缺乏管理。没有一个池来限制线程的数量,如果并发量很高,会创建很多线程,而且线程之间可能会有相互竞争,这将会过多占用系统资源,增加系统资源的消耗量。而且线程数量超过系统负荷,容易导致系统不稳定。 Java的Executor框架是Java 1.5引入的用于管理和控制多线程的一种机制,它旨在解决直接使用`new Thread(…).start()`方法创建线程所带来的问题。在传统的多线程编程中,直接创建和销毁线程会导致大量开销,且无法有效地管理线程数量,可能导致系统资源的过度消耗和系统稳定性下降。 Executor框架的核心接口是`Executor`,它只有一个方法`execute(Runnable command)`,用于执行给定的任务。`Executor`接口提供了任务执行的基本模型,但并未提供关闭或管理线程池的能力。 为了解决这个问题,`ExecutorService`接口扩展了`Executor`,并提供了更丰富的功能,如任务的提交、跟踪和关闭。`ExecutorService`提供了`shutdown()`和`shutdownNow()`方法来关闭线程池,前者等待所有任务执行完毕,后者则尝试停止未开始的任务并返回尚未开始的任务列表。`isShutdown()`和`isTerminated()`方法分别检查线程池是否已关闭以及所有任务是否已完成。 Executor框架还引入了`Callable`接口,作为`Runnable`的增强版。`Callable`的任务可以有返回值并且能抛出异常。`Future`接口则用来获取`Callable`任务的结果,支持检查任务状态、取消任务以及阻塞等待结果。 `Executors`是`ExecutorService`的工厂类,提供了一些静态方法来创建不同类型的线程池,如固定大小的线程池、单线程的线程池、缓存线程池等。这些线程池可以根据需求实现更高效、更可控的并发处理。 在实际应用中,通过`ExecutorService`提交`Callable`或`Runnable`任务,可以显著提高程序性能和资源利用率。例如,使用`ExecutorService.submit(Callable<T>)`或`ExecutorService.submit(Runnable)`方法,会返回一个`Future`对象,可以用来检查任务状态、取消任务或获取结果。 Java的Executor框架通过引入线程池和任务管理机制,有效地解决了多线程编程中的一些痛点,提高了并发性能,降低了资源消耗,同时提供了更加灵活和强大的线程管理能力。开发人员可以根据具体需求选择不同的`ExecutorService`类型,以实现最优的并发策略。
剩余11页未读,继续阅读
- 粉丝: 254
- 资源: 1940
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助