函数执行顺序(多线程)

时间:2013-12-19 11:47:24

标签: java multithreading

我正在使用Java。

我有一个主函数和函数f()。线程是在f()中创建的,但f()中的其他操作需要更多时间。 сapital字母的真实顺序是什么?

main() {
  operations A;
  f();
  operations B;
}

f() {
  C;
  final Thread thread = new Thread() {
        @Override
        public void run() {
          many operations, more than B+D;
          E;
        }
  };
  thread.start();
  D;
}

我如何确保订单是A-C-D-B-E?

1 个答案:

答案 0 :(得分:1)

您使用条件变量来确保在通知之前某些代码不会运行。假设整个过程只运行一次,

volatile boolean canGoOn = false;
final Object condition = new Object();

// in main:
B;
synchronized (condition) {
    canGoOn = true;
    condition.notify();
}

// in thread:
synchronized (condition) {
    while (!canGoOn) {
        condition.wait();
    }
}
E;

(未经测试,您可能需要捕获一些InterruptedException。)


顺便说一下如果您使用的是Android,那么整个成语都会打包到android.os.ConditionVariable类中,您只需要在.open()中使用它,然后在.block()中使用它。