-volatile
volatile 主要作用是是变量在多个线程间可见。
- 一个同步死循环的问题
主要形式例如:main调用一个方法print(),这个方法根据一个boolean 值判断是不是结束循环,但是这个初始的boolean值是true的,也就是会在方法里一直循环,而把这个值置为false的语句在mian里调用print()的下面,也就是说单线程模式下,main执行不到调用print()下面的语句。
解决办法:新开一个线程去执行print(),新线程和main线程是异步的,也就是说即使新线程在print里暂时死循环了,main下面把boolean置为false的语句还是可以执行的,那下一次时间片轮到新线程的时候,它一看,诶! boolean值变成false了,果断退出循环了。
但是,上面的代码运行在-server服务器的64bit的JVM上时,会出现死循环,解决办法就是volatile. 关键字volatile的作用就是强制从公共栈里面取得变量的值,而不是从线程私有数据栈中取得变量的值。
看下面例子:
public class RunThread extends Thread {
private boolean isRuning=true;
public boolean isRuning() {
return isRuning;
}
public void setRuning(boolean runing) {
isRuning = runing;
}
@Override
public void run() {
System.out.println("进入run了");
while (isRuning==true){
}
System.out.println("线程被停止了!");
}
}
public class Run {