群友發(fā)了一段代碼,說變量沒有加volatile,但是依舊可見,代碼大致如下:
public class StopThreadTest implements Runnable {
private boolean flag = true;
public static void main(String[] args) throws InterruptedException {
StopThreadTest stopThreadTest = new StopThreadTest();
Thread thread = new Thread(stopThreadTest);
thread.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
stopThreadTest.flag = false;
}
@Override
public void run() {
int i = 0;
while (flag) {
System.out.println(i);
}
System.out.println("計(jì)數(shù)器已經(jīng)停止");
}
}
這段代碼甚至差點(diǎn)讓我改變?nèi)^颤殴。。鼻忠。
經(jīng)過若干測(cè)試后涵但,發(fā)現(xiàn)問題出在System.out.println(i); 這個(gè)方法包含一個(gè)加鎖的動(dòng)作,如下:
image.png