1
情況就是這樣,methodB()在應用程序運行時被再次調用。當調用methodC()時,methodB()將暫停,直到methodC()完成。當調用methodA()時,它會暫停,直到methodB()完成三次,但跳過「代碼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) {}
}
}
}
這可能有所幫助:http://stackoverflow.com/questions/16758346/how-pause-and-then-resume-a-thread – Ishnark
這種類型的邏輯聽起來很奇怪,尤其是「當調用methodA()時,它會暫停,直到methodB()完成三次「如果另一個線程在調用A時已經調用了B怎麼辦?對我進行編碼不會有什麼問題,但我有一種感覺,你正在走錯路。你是什麼意思的應用程序?如果調用線程是UI線程,則不能只是阻止並等待收到通知,因爲這會導致UI凍結。 –
實際上,methodB()方法就像onCameraFrame一樣,不會被其他線程調用。 – shisushi