Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2020-03-06:JMM是什么?它存在哪些问题?该如何解决? #240

Open
Moosphan opened this issue Mar 6, 2020 · 3 comments
Open
Labels

Comments

@Moosphan
Copy link
Owner

Moosphan commented Mar 6, 2020

No description provided.

@Moosphan Moosphan added the Java label Mar 6, 2020
@yline
Copy link

yline commented Mar 21, 2020

JMM,我搜了一下是Java内存模型。如果不是这个意思,那就是我理解错了。【真不喜欢使用不广泛缩写】

它的本质是人为规定的协议或模型,通过这个协议,解决多个处理器处理主内存时,缓存不一致的问题。因此,它并不存在什么问题,而是解决了缓存一致性问题。

缓存一致性问题:原子性、可见性、有序性

@zhengjiong
Copy link

Java内存模型
存在的问题就是多线程对共享数据的读写一致性问题
可以通过synchronized、cas、并发安全的数据结构、aqs组件来解决

@senlinxuefeng
Copy link

java内存模型:定义了共享内存系统中多线程程序读写操作行为的规范,Java内存模型也就是为了解决这个并发编程问题而存在的
怎么解决:内存模型解决并发问题主要采取两种方式,分别是限制处理器优化,另一种是使用了内存屏障。
而对于这两种方式,Java底层其实已经封装好了一些关键字,我们这边只需要用起来就可以了。
关于解决并发编程中的原子性问题,Java底层封装了Synchronized的方式,来保证方法和代码块内的操作都是原子性的;
而至于可见性问题,Java底层则封装了Volatile的方式,将被修饰的变量在修改后立即同步到主内存中。
至于有序性问题,其实也就是我们所说的重排序问题,Volatile关键字也会禁止指令的重排序,而Synchroinzed关键字由于保证了同一时刻只允许一条线程操作,自然也就保证了有序性。

参考文档,JMM是什么和面什么

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants