- 加上此关键字后,该变量在别的线程中被修改了,能及时同步到别的线程
- 直接上一个今天看到的一个demo
volatile boolean isExit ; //这里的关键字不加上的话,这个程序会一直跑下去,但是这个关键字加上了,这个程序会在一定时间内调用System.exit(0); int exitCount = 0; int swapCount = 0; public void tryExit() { exitCount ++ ; if(isExit == !isExit) { System.out.println("被调用了exit(0),exitCount["+exitCount+" 次],swapCount["+swapCount+" 次]"); System.exit(0); } } public void swapValue() { System.out.println("被调用了swap..."); swapCount ++; isExit = !isExit ; } public static void main(String[] args) { final TestVolatile2 vo = new TestVolatile2(); Thread exitThread = new Thread(){ @Override public void run() { System.out.println("exitThread start..."); while(true) { vo.tryExit(); } } }; exitThread.start(); Thread swapThread = new Thread(){ @Override public void run() { System.out.println("swapThread start..."); while (true) { vo.swapValue(); } } }; swapThread.start(); }
结论: 加上了volatile关键字后,每次线程总是会去主线程中获取变量的值,所以isExit==!isExit才会有可能成立。
多线程 Volatile 关键字
猜你喜欢
转载自hebad90.iteye.com/blog/2044044
今日推荐
周排行