资源,作业,任务
进程,线程,协程
串行,并行,并发
同步,异步
锁
关键字
线程安全类
资源分类:互斥资源(一次只能1个进程/线程/协程使用),抢占式资源(可以被抢占,CPU),消耗型资源(资源有限个)
作业:由程序员书写的静态过程,进程讲作业
任务:由程序员书写的静态过程,线程讲任务
直接制约:进程同步,进程之间有执行顺序
间接制约:互斥资源
进程是资源拥有者:每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。
进程特点
进程状态
进程同步
进程通信
进程中断
经典同步问题:资源、进程、信号量
死锁产生的必要条件
动态,并发,独立,异步
就绪、运行、阻塞、挂起
同步机制
经典同步问题
共享数据结构:例如,生产者消费者中的有界缓冲区
共享存储区:需要通信的进程将共享存储区中的一个分区附加到自己的地址空间
消息系统:操作系统提供的通信命令在进程间传递格式化的消息
管道机制:pipe文件连接读写进程
C/S系统:不同计算机的进程间通信
停止当前任务》执行新任务》回到原来任务继续执行
线程数量:1个程序至少有1个进程,1个进程至少有1个线程
并行并发:多线程程序在单核上运行,是并发;多线程程序在多核上运行,是并行
内存共享:各个线程之间共享程序的内存空间(也就是所在进程的内存空间)
线程分类:内核线程、用户线程;内核线程和用户线程间有 多对多、一对一、多对1的关系
内核线程:一般一个CPU物理核心对应一个内核线程,使用超线程技术后出现“4核8线程”
内核线程:内核级线程是由操作系统进行调度的,用户级线程是由用户来控制调度的
java中线程分类:User Thread(用户线程)、Daemon Thread(守护线程)
非守护线程结束,所有守护线程全部杀死
原子性
有序性
可见性
就绪、运行、阻塞、挂起
共享数据结构
消息系统:
管道通信:
interrupt() 并不能真正的中断线程,需要被调用的线程自己进行配合才行。
不应该强制中断,应该由线程自行停止
中断响应方式:运行状态自行中断,selfInterrupt();阻塞状态直接抛出异常,throw new InterruptedException()
中断最终都是抛出InterruptedException
适用:高并发,多IO场景。不适用于大量计算的场景,大量计算的场景用多线程更好
普通锁(synchronized), 乐观锁(CAS), AQS(AbstractQueuedSynchronizer), 悲观锁
使用时机:
乐观锁(CAS):compare and swap
悲观锁:
synchronized
volatile
集合:Vector, StringBuffer, HashTable, ConcurrentHashmap, CopyOnWriteArraySet
原子类:AtomicInteger, LongAdder(java8), DoubleAdder(java8)
阻塞队列:LinkedBlockingQueue(无界队列), SynchronousQueue(同步队列), DelayedWorkQueue(延迟队列)