package com.example.xmzjcqgl.test;
public class test {
static Boolean c=true;
static Integer count=0;
public static void main(String[] args) {
new Thread(()->{
while (true){
// System.out.println("000000000"+"1111"+c);
while (c){
c=false;
System.out.println("1111"+c+":"+count++);
}
}
}).start();
new Thread(()->{
while (true){
//System.out.println("000000000"+"2222"+c);
while (!c){
c=true;
System.out.println("2222"+c+":"+count++);
}
}
}).start();
}
}
问题 为什么把 while (true){里面的输出放开while (c){就可以无限执行 屏蔽掉while (c){执行一会就不输出了 但是程序还没停
首先,程序没有停止,是因为外层 while(true) 是死循环。
多线程同时操作一个变量 c 是存在可见性问题的,如果没有及时看到写入后的 c 的值,就可能出现 while(c) 不执行的情况。
因为当线程获取、释放锁的时候会把对应的本地内存中的共享变量刷新到主内存中
在println中会获取、释放锁,会不停的刷新变量C
其实就相当于你加了Volatile了
另外这声望还可以负的吗