并发系列(二)并发相关类与接口概述

本文详细介绍了Java并发编程中关键的类与接口,包括Thread、Runnable、Callable、Future、FutureTask、Executor、Executors、ExecutorService、CompletionService及ExecutorCompletionService。通过对比不同接口和类的功能,帮助读者理解多线程的创建、执行、结果获取及线程池管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.并发相关类与接口思维导图预览

在这里插入图片描述
学习和使用多线程的过程中,遇到很多的类和接口,以下将其整理做概括性描述,具体细节需要可以自行去深入理解学习。

2.知识分点

2.1 Thread(类)

在这里插入图片描述
该类在jdk1.0的时候就已经存在,是创建线程的方式之一,它实现了Runnable接口。可以通过继承Thread类,重写run方法来创建一个线程,实现类调用start()方法便可以启动一个新的线程,同样它的构造方法也可以接受一个Runnable类型的参数创建一个线程。

2.2 Runnable(接口)

在这里插入图片描述
该接口也是一个顶层接口,只有一个run方法,具体方法源码如下:

public abstract void run();

创建线程的方式之一就是实现该类,重写run方法,将实现类作为参数,传递给Thread的构造方法启动一个新的线程,同样在jdk1.0中就已经出现,

补充:通过继承Thread类型实现的多线程,大多是多个线程去做多件事情。而通过实现Runnale接口的多线程,一般是多个线程去做同一件事情,即将一个实现类交给多个线程去运行

2.3 Callable(接口)

在这里插入图片描述
该接口出现于jdk1.5,目的是作为Runnable的替换类,该类支持执行方法call()返回执行结果,而Runnable方法的run()的返回类型为void。接口源码如下:

V call() throws Exception;

2.4 Future(接口)

在这里插入图片描述
该接口同样出现在jdk1.5,配合与Callable使用,Callable的作用是产生结果,而Future的作用则是获取结果。并且该接口设计一种新的模式。

2.5 FutureTask(类)

在这里插入图片描述
该类直接实现了RunnableFuture接口,间接实现了Runnble和Future接口。因为实现了Runnbale接口,因此其对象可以作为参数被传递给Thread类启动一个线程,作为Future的一个实现类,调用get()方法拿到线程的执行结果。
其构造函数可以接受一个Callable类型的参数。

2.6 Executor(接口)

在这里插入图片描述
多线程的顶层接口,仅有一个方法,接受的是Runnable类型的参数,像ThreadPoolExecutor, ExecutorService 等都是继承或实现了该接口。
源码如下:

void execute(Runnable command);

2.7 Executors(类)

在这里插入图片描述
该类是一个工具类,通过静态方法可以获取到java自带的几种线程池。

2.8 ExecutorService(接口)

在这里插入图片描述
该接口是对Executor接口的扩展,其submit()方法支持接受Callable类型参数,运行后的结果将会返回到Future中,具体方法源码如下:

<T> Future<T> submit(Callable<T> task);

<T> Future<T> submit(Runnable task, T result);

Future<?> submit(Runnable task);

//支持callable集合的传递,将会返回一个Future的list
<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 InterruptedException;

<T> T invokeAny(Collection<? extends Callable<T>> tasks)
        throws InterruptedException, ExecutionException;
        
<T> T invokeAny(Collection<? extends Callable<T>> tasks,
                    long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;

2.9 CompletionService(接口)

在这里插入图片描述
该接口仅有一个实现类,该接口作用类似于ExecutorService,但是不同于ExecutorService

2.10 ExecutorCompletionService(类)

在这里插入图片描述
该类是上一个接口CompletionService的唯一实现类,总的来说,相对于ExecutorService,该类内部会有一个队列,每当任务提交时,该类会调用Executor进行执行,如果任务执行完毕,其结果future对象便会加入到该队列之中,确保该队列获取到的future对象都是已经完成的,以便于进行后续的工作。但是ExecutorServiece执行完毕的之后的Future有可能只是一个空的壳子,内部线程未执行完毕,这时调用get()方法可能会阻塞,阻碍获取后续已经完成的Future的对象。具体细节实现可以参考以下博文:CompletionService和ExecutorCompletionService详解

以上就是在工作和学习中所接触到一些的并发相关的类和接口,后续学习过程中会不断进行扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值