Java并发

2019-08-19  本文已影响0人  蜡笔没了小新_e8c0

1. 八个操作

2. 内存模型八种规则

3.lock是怎么确保线程安全的?

根据内存模型的规则,当执行lock时,会把工作内存中的变量清空,重新执行read和load操作,确保工作内存中的变量和主内存一致。执行unlock时,会把工作内存的值通过store和write操作同步会主内存。

4.volatile可以保证原子性吗?

不能,volatile的可见性只能保证在获取值的时候该值是最新的,可是有可能在对值进行操作时,别的线程对该值进行了修改操作。

5.volatile适用场景?

6.volatile如何保证可见性?

使用变量前都必须从主内存中刷新最新的值,修改变量后必须立即同步会主内存中。

7.volatile如何实现禁止指令重排序?

因为volatile规则要求如果某个线程先对某个变量执行了use或assign操作,那么该线程也必须先执行read或write操作。(这条规则要求volatile修饰的变量不会被指令重排序优化,保证代码的执行顺序与程序的顺序相同)。

8.synchronized如果保证原子性,可见性,有序性?

9.先行发生原则

10.线程安全的定义?

当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。

11.ReentrantLock和Synchronized区别?

上一篇下一篇

猜你喜欢

热点阅读