当一个线程修改了一个volatile变量的值,这个修改对其他线程是立即可见的,也就是说,如果一个线程修改了一个volatile修饰的变量的值,那么其他线程在读取这个变量的值时会立刻看到最新修改的值,而不会使用之前的缓存值。
今天来介绍下Java中的volatile关键字,volatile也是Java并发编程中不得不看的一个部分,在之前的文章中说到的双重检测单例模式单例模式和 单例模式, 其实也跟volatile也有不解之缘,另外volatile跟计算机体系架构也是有着千丝万缕的关系。
Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。
原子性原子性的定义:原子性指一个操作是不可分割的,不可中断的,一个线程在执行时,另一个线程不会影响到它。JMM(Java Memory Model)。不同的硬件和不同的操作系统在内存上的操作有一定差异的。
现在有了一定的生活阅历,再来看老子的《道德经》,发现那才是大智慧,《论语》属于儒家是讲人与人的关系,《道德经》属于道家讲人与自然的关系,效法天之道来行人之道,儒家讲入世,仁义礼智信,道家讲出世,无为而无不为。
公司最近在招聘实习生,作为面试官之一的我,问了一道不起眼的经典面试题。一、i++和++i有啥区别?大部分的面试者会这样答:i++ 返回原来的值,++i 返回加1后的值。i++是先赋值,然后再自增;++i是先自增,后赋值。下面这个才是主菜。二、高并发场景下i++会遇到哪些问题?