什么是并发编程?
deepseek介绍,并发编程(Concurrent Programming)是指程序设计的一种范式,它允许程序中的多个任务在重叠的时间段内执行,从而提高资源利用率和系统吞吐量。
好处:1.加快响应速度
2.代码拆分异步化
3.多核CPU,充分利用CPU资源
进程、线程、协程
进程(Process)
定义:进程是操作系统进行资源分配和调度的基本单位,是程序的一次执行实例。
这里主要理解为对内存进行分配的基本单位,主要为内存,其余少量网络IO等
线程(Thread)
定义:线程是进程内的执行单元,是CPU调度的基本单位。
一个进程包括多个线程
协程(Coroutine)
定义:协程是一种比线程更加轻量级的并发编程模型,也被称为"微线程"或"用户态线程"。协程由程序员在用户空间显式控制调度,而不是由操作系统内核调度。
在JDK19版本(非LTS)引入,在java中称为虚拟线程。正式版应用选择23年发布的JDK21(LTS)版本
进程间通信
进程间通信(Inter-Process Communication,IPC)是指在不同进程之间传播或交换信息的技术方法。由于进程拥有独立的地址空间,操作系统需要提供特殊机制来实现进程间通信。
通信方式:
- 管道
匿名管道(Pipe):父子进程、兄弟进程间通信
命名管道(Fifo): 无亲缘关系间进程通信
- 消息队列(Message Queue)存储在内核中
- 共享内存 (Shared Memory) 最高效的IPC方式
- 信号量(Semaphore)
- 信号(Signal)
- 套接字(Socket)
并行、并发
并发:某一时间内,处理任务的数量
并行: 同时执行多个任务
JAVA线程
线程状态/生命周期
JAVA一共有6种状态
初始态(NEW),此时创建了线程对象,但是没有调用start()方法
运行状态(RUNABLE), 在调用start()后转换为运行状态。分为等待(ready)或者运行(running)状态
阻塞状态(BLOCKED), 等待进去synchronized方法块
等待状态(WAITING),不带参的wait(),等方法
超时等待(TIMED_WAITING),带超时时间的等待
终止(TERMINATED),正常运行完成
常见面试题:
创建线程有哪些方式?
个人理解:
在Thread类上,声明了有2种方式去创建一个线程,一种是继承Thread类,另一种是实现Runnable接口。
常见的Callable是通过FutureTask包装成Runnable,在交给Thread去执行。
通过线程池创建线程,是一种池化技术,避免了重读创建带来的资源消耗。