java启动一个后台线程接连完成

我看到了这个问题: 如何在完成另一个线程后运行一个线程 ,但是它的答案对我来说不合适。

我有这样的Android代码:

public void startTask(Runnable r) { running = true; Log.i(tag, "-----------start.Runnable-----------"); Thread first = new Thread(r); first.start(); Thread second = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub running = false; } }); } 

第一个Thread作为param Runnable对象,具有一些我在后台服务中处理的硬操作。 所以,当我调用method: startTask()时我设置了running = true; 防止双重执行任务。 但是,我也需要在第一个线程完成第二个线程后立即设置running = false; 使其他操作能够执行。

如何等待第一个线程的完整性,不要冻结主线程? 谢谢!

尝试这个:

 final Thread first = new Thread(r); first.start(); Thread second = new Thread(new Runnable() { @Override public void run() { first.join(); // TODO Auto-generated method stub running = false; } }); second.start(); 

我变了:

  • 为’first’添加最终的keyworrd
  • 在第二个线程的开头用#join等完第一个线程。
  • 很快就开始了第二线程。

您可以使用SingleThreadExecutor

 Executor executor = Executors.newSingleThreadExecutor(); executor.execute(runnable1); executor.execute(runnable2); 

我不是Android程序员,但这样的事情可能有效:

 private volatile boolean running = false; public void startTask(final Runnable r) { running = true; Log.i(tag, "-----------start.Runnable-----------"); Runnable runme = new Runnable() { @Override public void run() { try { r.run(); } finally { running = false; } } }; new Thread(runme).start(); } 

它只需要一个线程来运行任务,然后清除running标志。 注意在running声明中使用volatile ,因为这个变量是从多个线程读取和写入的。