我看到了这个问题:how to run one thread after complete another thread,但答案对我来说不合适。
我有这样的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
对象作为一些硬操作,我正在后台服务中处理。所以,当我调用方法时: startTask()我设置 running = true; 以防止双重执行任务。但是,我也需要在第一个线程完成第二个线程后立即设置 running = false; 以启用其他操作。
如何等待第一个线程的完整性,不要冻结主线程?谢谢!
答案 0 :(得分:6)
您可以使用SingleThreadExecutor
。
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(runnable1);
executor.execute(runnable2);
答案 1 :(得分:5)
试试这个:
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();
我改变了:
答案 2 :(得分:2)
我不是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
标志。请注意在volatile
的声明中使用running
,因为正在从多个线程读取和写入此变量。