1. 挂载卸载过程1.1.constructor()1.2.componentWillMount()1.3.componentDidMount()1.4.componentW...
近日生产CDH5.7.2集群中的某一台机器在升级glibc和java后,Yarn NodeManager无法正常启动,提示报错如下: 处理该问题时还是走了一些的弯路,事后来看...
用过 SpringBoot 的同学都知道,其程序的启动类是在一个main方法中调用SpringApplication.run方法执行的,如: 那么,这里面到底做了什么呢?本篇...
1. 问题 最近在项目中添加了会话验证过滤器,该Filter中使用@Autowired自动装载了一些从数据库中获取的系统配置,调试的时候发现注入失败,返回为null。 2. ...
1.网络代理设置 IDEA配置代理,是在File-> Setting-> plugins中设置 image.pngimage.pngimage.pngimage.png 查...
原子性,对volatile变量的读写具有原子性,即单纯读和写的操作,都不会受到干扰。这里有误
public class VolatileTest {
private static volatile int INIT_VALUE = 0;
private final static int MAX_LIMIT = 500;
public static void main(String[] args) {
new Thread(() -> {
while (INIT_VALUE < MAX_LIMIT) {
System.out.println("T1->" + (++INIT_VALUE));
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "ADDER-1").start();
new Thread(() -> {
while (INIT_VALUE < MAX_LIMIT) {
System.out.println("T2->" + (++INIT_VALUE));
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "ADDER-2").start();
}
}
部分打印结果:
T1->19
T2->20
T1->21
T1->22
T2->23
T1->24
T2->25
T1->26
T2->26
T1->27
T2->27
T2->28
T1->28
T1->29
T2->30
T1->32
++INIT_VALUE 操作分三步:
a.读取变量 INIT_VALUE的值 -> 26
INIT_VALUE 的值+1 -> 26+1
将值赋予变量 INIT_VALUE -> INIT_VALUE=27
由于这三步中的任意一步线程都可能放弃cpu执行权,其他线程获取到执行权后如果一步完成,就会出现上图的情况
写这么多,真不容易
深入理解JVM-内存模型(jmm)和GC1 CPU和内存的交互 了解jvm内存模型前,了解下cpu和计算机内存的交互情况。【因为Java虚拟机内存模型定义的访问操作与计算机十分相似】 有篇很棒的文章,从cpu讲到内...