我想使用Servlets(resteasy + Hibernate)實現預約隊列。我的預約管理員 如下(當然簡化)。Java靜態同步vs BlockingQueue實現
public class AppoController{
public synchronized static int createAppoinment(AppObj app){
//get last app no
//insert new app with no+1
//return new app no
}
}
目前這種方法工作正常。但我已閱讀有關BlockingQueue實現這似乎是正確的方式?做工精細的
定義:
如果我不使用同步的靜態和一次多個約會發送多個請求具有相同的任命沒有
但是,如果使用同步靜態,約會與正確的順序創建
我沒有在這裏使用任何線程,但我認爲tomcat使用自己的線程來從用戶的服務器http請求。 所以這是一個多線程的應用程序?
我用Google搜索它過去幾天,但我得到的最接近的是Java/Android: Synchronized vs Queue implementation
什麼,我需要澄清的是,
- 這是做到這一點的正確方法嗎?
- 對我的場景使用同步靜態vs BlockingQueue實現有什麼優點和缺點。
任何你看起來相關的其他輸入也是受歡迎的。謝謝。
我認爲這並不重要,因爲這兩種方法都侷限於單個JVM。如果您的服務受歡迎,那麼單個tomcat實例將無法處理所有流量。但是如果你將服務部署到第二個獨立的tomcat實例,兩種方法都不能保證唯一的預約號碼。因此解決這個問題的正確方法是讓數據庫生成預約號碼。 –
+1提升縮放的影響。已經完全錯過了那部分!只是一個簡單的問題,是否有可能在同步靜態方法中耗盡服務器線程,因爲它們被阻塞(等待)?和阻塞隊列相反,線程(生產者)永遠不會被阻塞? – eric
是的,但它是(a)已棄用,(b)計劃搬遷,和(c)絕對是你想要的最後一件事。只需同步您需要同步的內容,或者使用'java.util.concurrent.'中的某些內容' – EJP