前言:第一次写博客,心情有点小激动。以后要将在平时工作看书时的技术点总结下来,与各位网友分享,欢迎批评指正。
最近在工作时,发现之前的项目中有volatile关键字。然后自己查了点资料,对这个总结一下。
一、volatile确保了在应用中的可视性。
当我们对一个域用volatile修饰时,只要对这个域进行了写操作,其他所有的读操作都可以看到这个修改。不同的任务中,即便有本地缓存,这个被volatile修饰的域也会被刷到主存当中。
public class Demo {
private static volatile int number = 0;
//some code here
...
}
读取和写入都是直接针对内存的。
另外,如果这个域只能通过同步来访问,比如上面的number。同步也会导致向主存中刷新,因此,如果一个域有synchronized或同步语句块来防护,那这个域就不需要设置为volatile。