为了账号安全,请及时绑定邮箱和手机立即绑定

细说Java多线程之内存可见性

难度中级
时长57分
学习人数
综合评分9.63
181人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.4 逻辑清晰

最新回答 / qq_慕设计1559327
as-if-serial:无论如何重排序,程序执行的结果应该与代码顺序执行的结果一致。很明显,2.1和2.2,进行重排后,结果都是一样的翻译搜索复制

最新回答 / 一个爱西瓜的小伙
synchronized分为对象锁和类锁。加在非静态方法上的锁是对象锁,由于main中new了两个实例,write和read方法是不同对象,因此两个锁不是同一把锁,不具有互斥性。所以出现0和6的原因就是出现在处理器的重排序原因。两个线程同时启动,但是先执行哪个线程是有处理器决定的。如果是读线程先执行,结果就是0;如果是写线程先执行就是6;如有问题请指正。

最赞回答 / iceWang
一个或某几个操作只能在一个线程执行完之后,另一个线程才能开始执行该操作,也就是说这些操作是不可分割的,线程不能在这些操作上交替执行文中的 i++ 包括 3 个操作读取 i 的值i 的值 +1 将 i 赋值给 i在这 3 个操作中可能会有其他线程开始执行,因此不是原子性的

最新回答 / 慕娘5114374
单核也可以实现多线程的    多个线程可以并发执行

已采纳回答 / 特南克斯
main 线程是会和  new 出来的线程并行执行的,如果没有那个 while 判断,下面这行代码<...code...>就会在其他线程执行完之前就执行了。加 while 判断,就是为了等五百个线程执行完毕

最赞回答 / 慕前端6229441
共享变量是在多线程操作的情况下,对某一个变量都有进行操作,该变量存储在主存中,但是在多线程的工作内存中都有一个副本,所以该变量是共享的,即为共享变量。 volatile变量是被该关键字修饰的变量。在单线程中也可以用来修饰变量,但是没有意义。用在多线程中,是为了保证被其修饰的变量对于多线程来说都是内存可见的。 在多线程中,volatile用来修饰共享变量,实现共享变量的可见性。
首页上一页123456下一页尾页
课程须知
学习本课程前,你需要熟练掌握Java的基础语法,熟悉Java多线程的基础知识,以及synchronized实现线程同步的方法。
老师告诉你能学到什么?
1、内存可见性 2、指令重排序 3、as-if-serial语义 4、synchronized实现可见性 5、volatile实现可见性

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消