java 多线程 volatile 关键字分析

时间:2021-04-03 04:39:12

public class TestVolatileDemo {
//加 volatile 或者 System.out.println(bChanged); 每次都能退出
//不加 有时候退出 有时候死循环
//
// volatile
private static boolean bChanged = false;

public static void main(String[] args) throws Exception {

new Thread() {
@Override
public void run() {
for (;;) {
//synchronized (TestVolatileDemo.class) {
// 加上同步锁 当前线程的变量bChanged 会变成 volatile 的效果
//}
if (bChanged == !bChanged) {
System.out.println("!= "+bChanged);
System.exit(0);
}
}
}
}.start();

Thread.sleep(1);

new Thread() {

@Override
public void run() {
for (;;) {
bChanged = !bChanged;
//System.out.println("..");

}
}
}.start();




}


}