3
下午好一切,Java的信號燈停止線程
我與Java的信號量和併發工作的一個學校項目,並有關於它是如何工作的幾個問題!
如果沒有可用的許可證,我需要該線程退出「隊列」 - 不只是睡覺,直到準備就緒。這可能嗎?正如你可以在我的try, catch, finally
看 - 有沒有處理此事件:
try {
semaphore.acquire();
System.out.println(Thread.currentThread().getName() + " aquired for 3 seconds " + semaphore.toString());
Thread.sleep(3000);
}
catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release();
System.out.println(Thread.currentThread().getName() + " released " + semaphore.toString());
}
丹尼爾帶來了tryAquire
功能 - 這看起來不錯,但我已閱讀狀態的教程,信號燈需要try, catch, finally
塊,以防止死鎖。我的當前代碼(實現0)將在finally
塊中發佈,即使該線程從未獲取。你有什麼建議嗎?
public void seatCustomer(int numBurritos) {
try {
if(semaphore.tryAcquire()) {
System.out.println(Thread.currentThread().getName() + " aquired for 3 seconds " + semaphore.toString());
Thread.sleep(3000);
} else {
System.out.println(Thread.currentThread().getName() + " left due to full shop");
}
}
catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release();
System.out.println(Thread.currentThread().getName() + " released " + semaphore.toString());
}
}
謝謝丹尼爾!這是我一直在玩,但我的try/catch/finally塊釋放從未獲得的線程=/ –
我已更新我的答案,包括如何在finally塊中處理它。 – Daniel
這是門票 - 非常感謝你的幫助@Daniel –