我有以下代码:
1)
int operationCnt = 10;
for (int i = 0; i < operationCnt; i++) { // for every instruction
final int curOperation = i;
post(new Runnable() {
@Override
public void run() {
// execute something on the UI thread
if (curOperation == operationCnt) {
// Execution has finished RUN THE NEXT PIECE OF CODE SOMEHOW
}
}
})
}
2)
int operationCnt2 = 10;
for (int i = 0; i < operationCnt2; i++) { // for every instruction
final int curOperation = i;
post(new Runnable() {
@Override
public void run() {
// execute something on the UI thread
if (curOperation == operationCnt2) {
// Execution has finished WRAP IT UP
}
}
})
}
我想确保操作1首先运行,然后确保完成操作2运行。 最后,我希望能够在两个代码完成后运行一些代码。
(我希望那两个顺序执行 - 严格一个接一个地执行)
在其他语言中很容易,但我不确定在Java中实现相同逻辑的最简洁方法是什么?
请说清楚。
谢谢
答案 0 :(得分:0)
不要使用operationCnt
来控制线程流。 <{1}}中的变量i
必须是最终的。
您可以使用runner
等待:
Thread.join()
//程序到达此处后。所有线程Runnable r = () -> // do something;
Thread t = new Thread(r);
t.start();
Thread t2 = new Thread(r2);
...
t.join();
t2.join();
t3.join();
都已完成。你可以开始操作2
如果您不想在主线程上阻止,那么您可以使用t_i
:
CompletableFuture
答案 1 :(得分:0)
如果你需要异步运行一个操作,然后在第一个操作完成后运行第二个操作,那么为什么要使用两个Runnables和两个post调用?您可以将它们合并为一个。
如果你想先跑第N次
post(new Runnable() {
@Override public void run() {
for (int i = 0; i < 10; i++) {
// do operation 1
}
for (int i = 0; i < 10; i++) {
// do operation 2
}
}
});
或
post(new Runnable() {
@Override public void run() {
for (int i = 0; i < 10; i++) {
// do operation 1
// do operation 2
}
}
});