当前位置: 代码迷 >> J2EE >> 关于while循环的有关问题。跳不出循环。
  详细解决方案

关于while循环的有关问题。跳不出循环。

热度:38   发布时间:2016-04-22 00:57:51.0
关于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
  相关解决方案