
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
多线程编程开发是程序员在学习java编程的时候需要重点掌握的一个编程技术,而今天我们就通过案例分析来了解一下,java多线程编程内存模型特性。
同步是指程序中用于控制不同线程间的操作发生相对顺序的机制。在共享内存并发模型中,同步是显性进行的。程序员需要显性设置某段代码在线程之间的互斥执行。在消息传递的并发模型中,由于消息的发送必须在消息的接受之前,因此同步是隐性进行的。
Java并发采用的是共享内存模型。
Java内存模型(JMM)的关键技术点都是围绕着多线程的原子性、有序性、可见性来建立的。
1.原子性-Atomicity
原子性是指一个操作是不可中断的。即使在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。
例如,对于一个静态变量i,有两个线程对其赋值,线程A给它赋值1,线程B给它赋值2,那么不管这两个线程如何工作,i要么是1,要么是2。线程A和B之间是没有干扰的,这就是原子性的一个特点,不可被中断。
但是如果使用long类型(long类型是64位)的话,对于32位操作系统而言,long型数据的读写不是原子操作,也就是说,多个线程同时对一个long进行操作的话,线程之间的结果是有干扰的。
2.可见性-Visibility
可见性是指当一个线程修改了一个共享变量的值,其他线程是否能够立即知道这个修改。对于串行程序来说,这个问题是不存在的,因为在任何一个步骤中修改了变量值,在后续的步骤中读取这个值,一定是修改后的。
但是在并行程序中就不见得了。如果一个线程修改了变量值,其他线程未必能马上知道这个改动。A线程和线程B分别读取了变量i,A再对变量i操作,这时候B是不一定能马上知道的。
3.有序性-Ordering
对于一个线程的执行代码而言,我们总是习惯性的认为代码的执行是从前往后依次执行的。但是在并发时,程序的执行就可能出现乱序。给人的直观感受就是:后面的代码先执行,前面的代码后执行。听起来很不可思议,这是由于程序在执行时,可能会进行指令重排,即在不影响串行语义的情况下对指令的顺序进行调整,以优化CPU的执行效率(指令重排可以保证串行语义一致,但没有办法保证多线程间的语义也一致)。
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。