异步调用和创建线程

Posted 杀手不太冷!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步调用和创建线程相关的知识,希望对你有一定的参考价值。

异步调用和创建线程

异步调用

从方法调用的角度来讲,如果:

需要等待结果返回,才能继续运行就是同步

不需要等待结果返回,就能继续运行就是异步

注意:同步在多线程中还有另外一层意思,就是让多个线程步调一致

设计:

多线程可以让方法执行变为异步的(即不要巴巴干等着)比如说读取磁盘文件时,假设读取操作花费了5秒钟,如果没有线程调度机制,这5秒调用者什么都做不了,其代码都得暂停

结论:

比如在项目中,视频文件需要转换格式等操作比较费时,这时开一个新线程处理视频转换,避免阻塞主线程

tomcat的异步servlet也是类似的目的,让用户线程处理耗时较长的操作,避免阻塞tomcat的工作线程

ui程序中,开线程进行其他操作,避免阻塞ui线程

创建线程

方法一:直接使用Thread,如下图:

在这里插入图片描述

方法二:使用Runnable配合Thread

在这里插入图片描述

小结:

方法1是把线程和任务合并在了一起,方法2是把线程和任务分开了。

用Runnable更容易与线程池等高级API配合

用Runnable让任务类脱离了Thread继承体系,更灵活

方法三,FutureTask配合Thread

FutureTask能够接受Callable类型的参数,用来处理有返回结果的情况

在这里插入图片描述

以上是关于异步调用和创建线程的主要内容,如果未能解决你的问题,请参考以下文章

C# 异步方法加await调用不就变成同步方法了吗

使用异步的并行函数调用 [重复]

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

Java 多线程 同步和异步

常见异步机制分析

Springboot 使用@Async开启异步调用