我正在使用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?
答案 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()
中使用它。