千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  行业资讯  > 入门学习之Java内存模型技术分享

入门学习之Java内存模型技术分享

来源:千锋教育
发布人:千锋老师
时间: 2018-07-31 14:24:00 1533018240

  因为Java内存模型不仅是Java重点要学习的技术知识,还是面试的时候经典面试题,希望引起同学们的重视,今天千锋培训的老师就来分享一下Java内存模型的相关技术知识。

  不同的渠道,内存模型是不一样的,但是jvm的内存模型标准是一致的。其实Java的多线程并发问题都会反映在Java的内存模型上,所谓线程安全无非是要操控多个线程对某个资源的有序拜访或修改。总结Java的内存模型,要解决两个首要的问题:可见性和有序性。

图片1

  可见性: 多个线程之间是不能相互传递数据通信的,它们之间的交流只能经过同享变量来进行。Java内存模型(JMM)规定了jvm有主内存,主内存是多个线程同享的。当new一个目标的时分,也是被分配在主内存中,每个线程都有自己的作业内存,作业内存存储了主存的某些目标的副本,当然线程的作业内存大小是有限制的。当线程操作某个目标时,履行次序如下:

  (1) 从主存仿制变量到当前作业内存 (read and load)

  (2) 履行代码,改动同享变量值 (use and assign)

  (3) 用作业内存数据改写主存相关内容 (store and write)

  当一个同享变量在多个线程的作业内存中都有副本时,如果一个线程修改了这个同享变量,那么其他线程应该可以看到这个被修改后的值,这就是多线程的可见性问题。

  有序性:线程在引证变量时不能直接从主内存中引证,如果线程作业内存中没有该变量,则会从主内存中复制一个副本到作业内存中,完成后线程会引证该副本。当同一线程再度引证该字段时,有可能从头从主存中获取变量副本(read-load-use),也有可能直接引证本来的副本 (use),也就是说 read,load,use次序可以由JVM完成体系决议。

  线程不能直接为主存中字段赋值,它会将值指定给作业内存中的变量副本(assign),完成后这个变量副本会同步到主存储区(store- write),至于何时同步往昔,依据JVM完成体系决议。有该字段,则会从主内存中将该字段赋值到作业内存中,这个进程为read-load,完成后线 程会引证该变量副本。

  千锋Java开发培训作为中国IT研发人才一体化服务的开拓者,为学生制定合理有序的学习计划,2周免费试听不满意不收费,与学员签订就业协议,坚持良心面授,从千锋Java开发培训班出去的学员均已高薪就业。千锋推出的免费Java视频教程,让学员能够更好的巩固基础技术能力。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT
开班信息
北京校区
  • 北京校区
  • 大连校区
  • 广州校区
  • 成都校区
  • 杭州校区
  • 长沙校区
  • 合肥校区
  • 南京校区
  • 上海校区
  • 深圳校区
  • 武汉校区
  • 郑州校区
  • 西安校区
  • 青岛校区
  • 重庆校区
  • 太原校区
  • 沈阳校区
  • 南昌校区
  • 哈尔滨校区