进程(Process)就是一个运行的程序过程,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配(有独立的地址空间、进程ID等)和调度的基本单位,是操作系统结构的基础。
进程资源有:包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。
线程 是程序执行流的最小单元(CPU的基本调度单位)。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈(栈是私有的,堆是共享的)组成。它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程是操作系统能够进行运算调度的最小单位。 被包含在进程之中,是进程中的实际运作单位。
进程和线程都是一个CPU工作时间段的描述,不过是颗粒大小不同。
线程安全
在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。
原因: 因为主内存和工作内存数据不一致性和重排序导致的
线程生命周期
新建(New) 当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值
就绪(Runnable) 当线程对象调用了start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行
运行(Running) 如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态
阻塞(Blocked) 当处于运行状态的线程失去所占用资源之后,便进入阻塞状态
死亡(Dead) 线程在die的时候会自动调用自身的notifyAll方法,来释放所有的资源和锁。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHeITzeS-1575890841134)(C:\Users\Lenovo\Desktop\简历\下载.png)]
https://www.cnblogs.com/sunddenly/p/4106562.html 详情
并发实战
concurrent包
- locks部分:显式锁(互斥锁和速写锁)相关;
- atomic部分:原子变量类相关,是构建非阻塞算法的基础;
- executor部分:线程池相关;
- collections部分:并发容器相关;
- tools部分:同步工具相关,如信号量、闭锁、栅栏等功能;
AQS
AbstractQueuedSynchronizer的简称。是一个并发包的基础组件,用来实现各种锁,各种同步组件的。
AQS对象里面有变量int state,用来记录加锁状态;还有一个关键变量 exclusiveOwnerThread,用来记录当前加锁的是哪个线程; AQS内部还有一个等待队列,专门放那些加锁失败的线程!