日期:2014-05-19  浏览次数:20718 次

关于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