多线程中同一个变量会共享,但是有时候会发现不同线程中的共享变量,值不同步,原来每个线程都会有自己的内存存放变量的缓存值,而不是一起使用主内存中的变量值。
问题:主线程的while循环中,当flag
为true时,循环体为空的话,后面的打印语句不会执行,会一直在while里循环;而在循环体中加上一句语句,比如System.out.println(),循环就会正常结束,执行后面的输出语句。为什么当while循环体为空时不会退出循环,加入一句打印就会退出循环?
多线程变量同步机制
最新推荐文章于 2024-07-25 09:35:12 发布
在多线程环境下,共享变量可能存在线程间不同步的问题,由于线程有自己的内存缓存,可能不立即读取主内存中的最新值。当while循环体为空时,频繁访问可能导致主内存不会及时刷新工作内存,加入如System.out.println()的语句,通过调整调度使得主内存有机会更新工作内存,从而解决不同步问题。volatile关键字可确保变量的可见性和有序性,强制从主内存读取,但会牺牲效率。
摘要由CSDN通过智能技术生成