0
您好我想擺脫一個無限循環,其中包含一個工作線程在服務中。Android服務和工作線程ReentrantLock無限循環
我嘗試使用ReentrantLock()方法,但我似乎無法讓它工作。
我的工作線程從JNI調用nativeWaitForTask方法並進入睡眠狀態。
但我的服務主線程似乎無法喚醒他在submitTask方法,他應該發信號的工作線程。
就像await()調用阻塞了服務的主線程一樣。
但他們在不同的線程,據我知道...
我做了什麼錯?爲什麼它不起作用?
private synchronized void nativeWaitForTask() {
threadLock.lock();
try {
while(opcode == SR_Manager.STATE_IDLE) {
newTask.await();
}
}catch (InterruptedException e) {
e.printStackTrace();
Log.e(SR_Manager.DEBUG_TAG,"Failed to wait for new task! " + e.toString());
}finally {
threadLock.unlock();
}
}
private synchronized void submitTask() {
if (nativeMain.isAlive()) {
dstImageName = sr.getDstImageName();
if (sr.getSrcImagePath() != null && !sr.getSrcImagePath().equals(srcImagePath)) {
srcImagePath = sr.getSrcImagePath();
width = sr.getWidth();
height = sr.getHeight();
format = sr.getFormat();
algorithm = sr.getAlgorithm();
value = sr.getValue();
saveOutput = sr.getSaveOutput();
opcode = SR_Manager.STATE_LOAD_IMAGE;
} else if (sr.getOpcode() != SR_Manager.STATE_LOAD_IMAGE) {
algorithm = sr.getAlgorithm();
value = sr.getValue();
saveOutput = sr.getSaveOutput();
opcode = sr.getOpcode();
}
t0 = System.currentTimeMillis();
} else {
// No native thread no service...
silentCrash(-100);
}
// Wake the worker thread which waits for the new task condition
threadLock.lock();
newTask.signal();
threadLock.unlock();
}