关于while循环的问题。跳不出循环。。。。。
问大家一个关于 java while 循环的问题。。
我在 main方法启动了一个多线程的任务。
等所有的线程 都执行完后,就改变isNext的状态为 true。
下面是我写的while循环 。但是所有的线程都执行完后,却没有跳出while循环,为什么呢?
Java code
isNext = false;
//..........
多线程部分省略掉...............
//
while (true)
{
if (isNext)
{
break;
}
}
}
可以确定是,所有启动的所有线程都执行完了。。而且isNext的状态 也改为true了。
奇怪的是,我只有在while循环中,加一个System.out.println(); 的语句,它就能跳出循环。。。。
希望有知道的朋友 说下哈
------解决方案--------------------
Java并发常见问题之中的:可见性问题。
这是由于运行过程中为了保证高效,变量值不是每次都从内存中获取,这就导致多个线程会有相同变量的副本问题。
必须把 isNext 声明为 volatile:
private volatile boolean isNext;
参见:
http://jilen.iteye.com/blog/1025199