Java并发编程——Executor框架

本文介绍了Java并发编程中Executor框架的引入原因和使用方法,包括如何利用ExecutorService创建线程池,以及如何通过Future和Callable创建带返回值的线程。详细讲解了Executor的execute方法、FutureTask的使用,以及ExecutorService的submit方法。
摘要由CSDN通过智能技术生成

今天看到《Java并发编程实战》第六章的时候,书中讲了利用Executor框架来实现多线程,平时Executor用得不多,今天顺带学习了一下,写出来总结总结。

引入Executor框架的原因

两种多线程执行任务的策略:

1.串行执行,即每次线程运行完才会运行下一个线程。这种方法是线程安全的,但是效率低,吞吐量小

2.为每个任务开辟一个线程,例如为每个请求服务器的连接建立一个线程,这种方法开销大(频繁地创建和销毁线程消耗大量资源,线程之间互相争夺处理资源等)以及有稳定性因素(线程的数量限制)

为了可以实现线程重用,对线程进行统一的管理,控制线程的数量,采用了线程池的方法。

使用方法

一、Executor框架使用Runnable作为其基本任务的表现形式

先看几个用到的接口(Executor,ExecutorService)

Executor接口

public interface Executor {
    void execute(Runnable command);
}

只要传入Runnable接口,调用execute方法即可开启线程。

ExecutorService接口(继承自Executor)

public interface ExecutorService extends Executor {

    void shutdown();
    List<Runnable> shutdownNow();
    boolean isShutdown();
    boolean isTerminated();
    boolean awaitTermination(long timeout, TimeUnit unit)
        throws InterruptedException;
    <T> Future<T> submit(Callable<T> task);
    <T> Future<T> submit(Runnable task, T result);
    Future<?> submit(Runnable task);
    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
        throws InterruptedException;
    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
                                  long timeout, TimeUnit unit)
        throws InterruptedExcepti
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值