package thread.key;
public class TestOne {
private volatile boolean bChange;
public static void main(String[] args) {
/**
*
* --------- volatile
* volatile是一种轻量级的同步,相对 synchronized开销小
* 所谓可见性,是指当一条线程修改了共享变量的值,新值对于其他线程来说是可以立即得知的。
*
*
* 1)写一个volatile变量时,JMM会将本地内存的变量强制刷新到主内存中去
* 2)会使其他内存中的值无效
*
*
*
*
* final
*
*
* 原子性
*
*
*/
try {
TestOne testOne = new TestOne();
new Thread(){
public void run() {
for(;;){
// System.out.println(Thread.currentThread());
testOne.changeStatus();
testOne.print(Thread.currentThread().toString());
}
};
}.start();
Thread.sleep(1);
new Thread(){
public void run() {
for(;;){
// System.out.println(Thread.currentThread());
// TestOne testOne = new TestOne();
// testOne.changeStatus();
testOne.print(Thread.currentThread().toString());
}
};
}.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void changeStatus(){
bChange = true;
}
public void print(String str){
if (bChange) {
System.out.println("-----"+str);
}else {
System.out.println(str);
}
}
}