JMM是如何解决原子性&可见性&有序性问题

1、原子性问题

除了JVM自身提供的对基本数据类型读写操作的原子性外,可以通过 synchronizedLock实现原子性。因为synchronizedLock能够保证任一时刻只有一个线程访问该代码块。

2、可见性问题

volatile关键字保证可见性。当一个共享变量被volatile修饰时,它会保证修改的值立即被其他的线程看到,即修改的值立即更新到主存中,当其他线程需要读取时,它会去内存中读取新值。

synchronizedLock也可以保证可见性,因为它们可以保证任一时刻只有一个线程能访问共享资源,并在其释放锁之前将修改的变量刷新到内存中。

3、有序性问题

通过·volatile·可以保证有序性

可以通过synchronized·和·Lock·来保证有序性,很显然,synchronized和Lock保证每个时刻是有一个线程执行同步代码,相当于是让线程顺序执行同步代码,自然就保证了有序性。

史上最全的并发编程脑图:https://www.processon.com/view/5b1f1ad7e4b03f9d251c06e5#map

猜你喜欢

转载自blog.csdn.net/fd2025/article/details/108333739