我看到了这样一个问题: 如何运行完整的另一个线程后一个线程 ,但它的答案是不适合我。
我有过类似的针对Android的Java代码:
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()我设置运行= TRUE; 以防止重复执行的任务。 但是,另外,我需要正确的第一线的完整性后,开始第二个线程设置运行=假; 使其他操作执行。
我怎样才能通过第二等第一线的完整性,不冻结主线程? 谢谢!
试试这个:
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();
我变了:
- 添加最终keyworrd为“第一”
- 通过在第二个线程的开始#join等待第一个线程的结束。
- 即将开始sencond线程。
您可以使用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
标志。 注意使用的volatile
在声明running
,因为这个变量被读取并从多个线程写入。