【问题标题】:Start a thread a second time再次启动线程
【发布时间】:2012-04-26 11:19:24
【问题描述】:
thread = new Thread()
        {
            @Override
            public void run() {
                while(!requestedToExit)
                {
                    SystemClock.sleep(3000);
                    Log.d("debug", "in");
                }
            }
        };

所以一个按钮有一个事件,每次我点击它都会启动线程(如果前一个线程不活动)。

所以我尝试使用 thread.start() 但它抛出的线程已经启动。我尝试了.run(),没有任何反应,每次单击按钮时我也尝试过,并且可以再次运行它,创建一个新线程并启动它:什么都没有。

一些想法?


使用 Runnable :

   r= new Runnable(){

            public void run() {
                while(!requestedToExit)
                {
                    Log.d("debug", "in");
                    SystemClock.sleep(3000);

                }
            }
        };

然后我在我的听众中使用:

thread = new Thread(injection);
thread.start();

但我只是第一次看到调试,之后他就再也没有进入过。

提前致谢

【问题讨论】:

    标签: java android


    【解决方案1】:

    来自JavaDoc -

    多次启动线程是不合法的。特别是,一个 线程完成执行后可能不会重新启动。

    改为使用java.lang.Runnable,并在必要时创建一个新线程来运行它。

    你需要做的是:

    Runnable r = new Runnable() {
        public void run() {
            ....
        }
    };
    

    然后,当你想启动它时:

    Thread t = new Thread(r);
    t.start();
    

    您需要始终创建一个新线程来运行该可运行对象。

    【讨论】:

    • 我编辑了我的第一篇文章。在此先感谢 PS:我也想使用 Thread 和 Runnable 中的函数,.isAlive 对我非常有用。
    • 我重新编辑了我的第一篇文章。我不使用 Thread t = new Thread(r) 但 t = new Thread(r) 因为我在开头定义了它 private Thread thread = new Thread();,否则我不知道我的线程 isAlive() 是否是第一个时间,但我认为这不是问题,因为我使用了 new Thread()。感谢您的帮助
    • 天哪,我智障了,忘记将 requestedToExit 设置为 false...谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多