无法停止循环

时间:2009-07-02 20:28:05

标签: java memory java-me mobile loops

我在j2me应用程序中遇到内存问题。 (见another question

我发现一个类有一个循环,在应用程序关闭之前不会停止。此循环占用了所有可用内存。

我没有上课,所以我不知道为什么这样做。所以欢迎任何建议。

以下是该类的简化版本:

    import java.util.TimerTask;

    public class SomeClass extends TimerTask implements Runnable {
        private boolean running = false;
        private Thread thread;

        public void invokeThread() {
           running = true;
           thread = new Thread(this);
           thread.start();
        }

        public void run() {
           while(running) {

                try {
                  Thread.sleep(800);

                } catch (InterruptedException ex) {
                  ex.printStackTrace();
                }
                doSomeStuff();
           }
        }

        private void doSomeStuff() {     
            // do some stuff that consumes my memory
        }

        public void dispose() {
            running = false;   
        }

}

另一个类调用SomeClass.invokeThread()并等待一些用户响应(这已经占用了一些内存)。

当用户结束输入数据时,另一个类调用dispose()并且while循环不会停止,等待几分钟或尝试导航更多的应用程序并得到一个OutOfMemoryError。

你能帮助我吗?

感谢

2 个答案:

答案 0 :(得分:3)

尝试将关键字volatile添加到变量running

private volatile boolean running = false;

这样做是为了确保您的线程始终使用变量的主副本,而不是本地存储的主副本。

答案 1 :(得分:0)

如果没有看到doSomeStuff()内部发生了什么,就无法确定为什么循环不会终止。显然,例程期望最终将调用dispose()或者最终手动将run设置为false。如果循环没有终止,那么这些事情都不会发生。您应该检查doSomeStuff()中的逻辑以找出原因。