离开后重新启动线程

时间:2014-03-22 17:30:36

标签: java android multithreading

我有一个包含循环的线程

while(isRunning){
}

isRunning是一个值为true的布尔变量,当点按某个按钮时它会false,因此它会离开循环和run()函数线程。

我想创建另一个按钮,点击它会重新输入run()功能。

我不确定当我离开run()函数时,线程是否死亡或者只是停止。 我尝试过使用thread.run(),但它没有用。

此外,我已经在其他人的问题上找到了关于此问题的答案,但似乎没有任何帮助我。谢谢你的帮助

3 个答案:

答案 0 :(得分:1)

当一个线程完成处理它的代码时,没有办法重新启动它。你可以:

  1. 创建一个新主题并将Runnable传递给该主题。

  2. 如果您需要经常使用run()方法,请使用Executor。您可以使用Executors.newSingleThreadExecutor(),它将为您提供工作线程。 (可重复使用的线程)。

      class Example {
           static ExecutorService executor = Executors.newSingleThreadExecutor();
    
           static Runnable run = new Runnable() {
                public void run() {
    
                }
           };
    
           public static void main(String[] args) {
                //anytime you wanna run that code..
                executor.execute(run);
           }
      }
    

答案 1 :(得分:0)

请阅读java并发教程。 http://docs.oracle.com/javase/tutorial/essential/concurrency/

只是可能,保护区块可能对您的案件有用,但您的案例有点模糊,无法推荐任何具体内容。 http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html

答案 2 :(得分:0)

如果你的线程运行到最后,它就会停止。 它会留在那里收集它的返回状态,直到线程被清理完毕。

要在同一个线程内重新启动,您需要一个额外的控制流程。 例如:

while (restarted) {
    while (isRunning) {
    }
    // Wait for a restart or end click
}

这就是线程池中所谓的工作线程,这是为了获得最佳性能。

但从逻辑上讲,你可能只想创建一个新的线程对象并启动它。

new Thread(p).start();