首页 > 代码库 > 多线程与并发编程实践
多线程与并发编程实践
一、多线程
进程一般作为资源的组织单位,是计算机程序的运行实例,表示正在执行的指令,有自己独立的地址空间,包含程序内容和数据,进程间资源和状态相互隔离。
线程是程序的执行流程,CPU调度执行的基本单位,有自己的程序计数器,寄存器,堆栈,帧,共享同一进程的地址空间,内存和其他资源。
当虚拟机中运行的所有线程都是守护线程时,虚拟机终止运行。
1、可见性
使用共享内存的方式进行多线程通信的话,可能造成可见性的相关问题,即一个线程所做的修改对于其他的线程不可见,导致其他线程仍然使用错误的值。
造成的原因:
(1)多线程的实际执行顺序
(2)CPU采用的层次结构的多级缓存架构
在写入时数据被先写入缓存中,之后在某个特定的时间被写回主存。不同的CPU可能采用不同的写入策略,如写穿透或者写返回等。由于缓存的存在,在某些时间点上,缓存中的数据域主存中的数据可能是不一致的。
(3)CPU指令重排
2、Java内存模型
描述了程序中共享变量的关系以及在主存中写入和读取这些变量值得底层细节。
(1)程序顺序
(2)同步顺序
(3)happens-before顺序
3、volatile关键词
4、final关键词
5、原子操作
二、基本线程同步方式
三、使用Thread类
四、非阻塞方式
五、高级使用工具
六、Java7新特性
七、ThreadLocal类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。