gpt4 book ai didi

java - 如何处理方法中的两个线程暂停

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:05 26 4
gpt4 key购买 nike

情况是这样的,app运行时methodB()被一次又一次的调用。当 methodC() 被调用时,methodB() 将暂停,直到 methodC() 完成。当methodA()被调用时,会暂停,直到methodB()调用三次,但会跳过“Code X”。

我尝试添加locker2、lock2和threadLocker2()来暂停methodA(),但它不起作用,因为methodB()也暂停。谁能给我一些建议,我该怎么做?

private final Object locker = new Object();
private boolean lock = false;

public void methodA() {
//Lock until methodB() run three times

//Do something
}

public void methodB() { //A thread called again and again
//Do something

threadLock();

//Code X
}

public void methodC() {
lock true;

//Do something

lock = false;
synchronized (locker) { locker.notify(); }
}

private void threadLock() {
synchronized (locker) {
while (lock) {
try {
locker.wait();
} catch (InterruptedException e) {}
}
}
}

最佳答案

我会使用原子 boolean 值(或整数)或 volatile boolean 值。

这是共享原子/ volatile boolean 值:

private AtomicBoolean secondMethodIsDone = new AtomicBoolean(false);

void firstMethod() {
methodInOtherThread();
while(!secondMethodIsDone.get()) {
//thread sleep waiting...
}
// do your things when second is done
}

这发生在另一个线程中:

  void methodInOtherThread() {
// do your stuff
// whenever is done:
secondMethodIsDone.set(true);
}

这应该可以。

关于java - 如何处理方法中的两个线程暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42029604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com