对线程切换和CPU高速缓存的一点理解

1.线程上线文切换时,如果在同进程内线程切换,则会保存当前线程的私有变量和寄存器,所以,根据JMM的happen-before原则,高速缓存中的线程私有变量会被保存在线程上下文环境中。当线程再次被唤醒的时候,确保线程能拿到当前线程最新的状态。
2.但是对于共享变量来说,不一定会去主内存中重新加载,如果能在高速缓存中命中变量,则会接着使用。所以,对于没有加锁和volatile字段修饰的变量来说,可能造成严重的后果。比如:

//flag是一个共享变量,可能不会加载其他线程的修改,导致,进入死循环
while(flag){
    sout("test");
}

你可能感兴趣的:(对线程切换和CPU高速缓存的一点理解)