问题一:什么是Java内存模型(JMM)?目的是什么?
什么是Java内存模型(JMM)?目的是什么?
参考回答:
Java内存模型(JMM)是一种规范,它屏蔽了各种硬件和操作系统的访问差异,保证了Java程序在各种平台下对内存的访问都能保证效果一致。它解决了多线程通过共享内存进行通信时存在的本地内存数据不一致、编译器对代码指令重排序、处理器对代码乱序执行等问题。
目的是保证并发编程场景中的原子性、可见性和有序性。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/634007
问题二:如何保证Java中的原子性?
如何保证Java中的原子性?
参考回答:
在Java中,可以使用Synchronized关键字来保证方法和代码块内的操作是原子性的。Synchronized关键字在字节码层面对应的是Monitorenter和Monitorexit两个高级字节码指令。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/634008
问题三:volatile关键字的作用是什么?
volatile关键字的作用是什么?
参考回答:
volatile关键字修饰的变量在被修改后可以立即同步到主内存,每次使用之前都从主内存刷新,从而保证了多线程操作时变量的可见性。同时,volatile还禁止了指令重排。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/634009
问题四:volatile关键字底层是如何实现的?
volatile关键字底层是如何实现的?
参考回答:
volatile关键字底层实现时,会多出一个lock前缀指令,它实际上相当于一个内存屏障。内存屏障会提供三个功能:确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面;强制将对缓存的修改操作立即写入主存;如果是写操作,它会导致其他CPU中对应的缓存行无效。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/634010
问题五:什么是AQS?主要解决哪些问题?
什么是AQS?主要解决哪些问题?
参考回答:
AQS全称为AbstractQueuedSynchronizer,是一个用来构建锁和同步器的框架。它使用CLH队列锁实现了一套线程阻塞等待以及被唤醒时锁分配的机制。
AQS主要解决状态的原子性管理、线程的阻塞与解除阻塞、队列的管理等问题。
关于本问题的更多回答可点击原文查看: