测试过程中由于用到了println输出结果,导致运行结果与实际不符,也找不到原因。后来查了些资料,知道是因println引起。但也不知道如何输出才会避免这个问题。今天再测试一次,有点眉目。
package com.test;
import java.util.concurrent.TimeUnit;
public class VolatileTest {
/* volatile */ boolean running = true;
void m() {
System.out.println(Thread.currentThread().getName() + " start");
while(running){
// System.out.println("");
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
System.out.println(Thread.currentThread().getName() + " end");
}
public static void main(String[] args) throws InterruptedException {
VolatileTest te = new VolatileTest();
Runnable r = te::m;
new Thread(r,"M").start();
//new Thread(() -> te.m(),"N").start();
new Thread(r,"N").start();
TimeUnit.SECONDS.sleep(1);
te.running = false;
}
}
不多解释,感兴趣的试一下