[英]Synchronization aid in java
我正在運行Web服務器。 每個用戶請求都將更新/查找數據庫。 並發數據庫連接的最大數目應小於N。第N + 1個並發請求應退出並執行其他邏輯,而不是連接到數據庫。 我能想到的是使用原子整數,該整數將在連接到db時按每個請求遞增/遞減。
我的問題是,除了Atomic Integer之外,Java中是否還有其他同步輔助工具可用? 我不認為我可以為此使用CountDownLatch或循環障礙。
Semaphore
是這種情況下最合適的同步原語:
private Semaphore s = new Semaphore(N);
public void doRequest() {
if (s.tryAquire()) {
try {
...
} finally {
s.release();
}
} else {
// other logic
}
}
您可以嘗試連接的ArrayBlockingQueue 。 用N初始化隊列。
但是我會敦促為此使用現有的解決方案,例如proxool 。
或者,您可以使用諸如Apache Commons DBCP之類的連接池,它將為您處理連接,並且可以在沒有連接池時等待連接,或者拋出並可以處理異常。
添加到suraj的答案中,我認為您的問題更多是producer consumer
,我更喜歡LinkedBlockingQueue
以提高吞吐量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.