如何在另一个异步代码片段在java(顺序)中完成执行后,如何执行异步代码?

时间:2018-05-16 16:13:09

标签: java android multithreading thread-sleep java-threads

我有以下代码:

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中实现相同逻辑的最简洁方法是什么?

请说清楚。

谢谢

2 个答案:

答案 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
        }
   }
});