一、前言:什么是多线程?多线程有什么用?

(一)什么是多线程?

先从基础概念拆解:

-进程:一个正在运行的程序,比如你打开的电脑管家,它是操作系统分配资源的基本单位。

-线程:进程中实际执行任务的最小单位,一个进程里可以同时运行多个线程,这些线程能各自做独立的事情,互不阻塞。

-多线程:让一个程序同时执行多个任务的技术,就像一个人同时做几件事,让程序的执行效率更高。

电脑管家就是一个进程,它里面的每个功能就是一个线程。就像你一边听歌、一边下载文件、一边聊天,每个功能都是一个独立的线程,同时工作。

(二)多线程有什么用?

1.实现并发和并行,提升效率,支撑高并发场景

-并发(单CPU交替执行)

比如餐厅里只有一个服务员,她轮流给A桌点餐、给B桌上菜、给C桌结账,同一时间只做一件事,但切换速度极快,客人开起来就像在同时服务。

对应到电脑里,单CPU的电脑,多线程会让任务交替占用CPU执行,比如一边下载文件、一边浏览网页,两个线程快速交替运行,实现“同时响应”。

-并行(多CPU同时执行)

比如餐厅有三个服务员,同时给三桌客人服务,同一时间每桌都有人在工作,是真正的“同时进行”。

对应到电脑里:多核CPU的电脑,多个线程可以分配到不同核心上同时执行,比如4核CPU同时运行4个计算任务,效率直接翻倍。

2.避免界面卡顿,提升用户体验

耗时操作(比如下载大文件、加载大量资源、数据库查询)放到单独线程执行,主线程就能继续响应用户操作,不会出现“程序未响应”。就像你用电脑管家扫描病毒时,依然能正常点击“清理垃圾”,两个操作互不阻碍。

3.提高资源利用率,不浪费算力

当程序在等待IO操作(比如读取文件·、网络请求)时,CPU会处于空闲状态。多线程可以让CPU在等待间隙,去执行其他任务,充分利用资源。比如聊天软件发消息的时候,网络请求要等待服务器响应,此时CPU可以继续处理其他用户的消息收发。

二、多线程的实现方式

多线程有三种实现方式。

第一种方式是继承Thread类的方式进行实现。

运行结果如下,可见两个线程的打印交替出现但无严格交替规则,Java线程依赖操作系统的调度器,操作系统调度哪个线程先执行、执行多久,都是不确定的。

第二种实现方式是通过实现Runnable接口的方式进行实现。

运行结果如下:

第三种实现方式是利用Callable接口和Future接口实现的

运行结果如下:

三、总结

实现多线程的三种方式各有千秋,继承Thread类较为简单,可以直接使用Thread类中的方法,但其扩展性差,不能再继承其他的类;实现Runnable接口和实现Callable接口的扩展性强,可以继承其他的类,但较为复杂且不能直接使用Thread类中的方法。

本章详细讲解了什么是多线程以及实现多线程的三种方面,后面将接着本章针对多线程常见成员方法、线程生命周期与状态转换及线程安全问题等展开讲解!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐