首页 > 代码库 > 多线程与并发编程实践

多线程与并发编程实践

一、多线程

进程一般作为资源的组织单位,是计算机程序的运行实例,表示正在执行的指令,有自己独立的地址空间,包含程序内容和数据,进程间资源和状态相互隔离。

线程是程序的执行流程,CPU调度执行的基本单位,有自己的程序计数器,寄存器,堆栈,帧,共享同一进程的地址空间,内存和其他资源。

当虚拟机中运行的所有线程都是守护线程时,虚拟机终止运行。


1、可见性

使用共享内存的方式进行多线程通信的话,可能造成可见性的相关问题,即一个线程所做的修改对于其他的线程不可见,导致其他线程仍然使用错误的值。

造成的原因:

(1)多线程的实际执行顺序

(2)CPU采用的层次结构的多级缓存架构

在写入时数据被先写入缓存中,之后在某个特定的时间被写回主存。不同的CPU可能采用不同的写入策略,如写穿透或者写返回等。由于缓存的存在,在某些时间点上,缓存中的数据域主存中的数据可能是不一致的。

(3)CPU指令重排



2、Java内存模型

描述了程序中共享变量的关系以及在主存中写入和读取这些变量值得底层细节。

(1)程序顺序


(2)同步顺序


(3)happens-before顺序



3、volatile关键词


4、final关键词


5、原子操作



二、基本线程同步方式


三、使用Thread类


四、非阻塞方式


五、高级使用工具


六、Java7新特性


七、ThreadLocal类