我有一個帶有Java服務器的Web應用程序,並且Java應用程序正在從Web獲取請求。如何限制訪問實例的請求數量?
問題是,有一個對象的實例,每次只能處理一個請求,並且Web請求在對象完成其作業之前到來。
如何爲這些請求創建某種「連接池」?或者有沒有其他方法可以限制對這個對象實例的訪問?
我在某些方法中使用了同步聲明,它做的很好,但問題在於它沒有排序。我怎樣才能控制這個方法的傳入請求的順序?
我有一個帶有Java服務器的Web應用程序,並且Java應用程序正在從Web獲取請求。如何限制訪問實例的請求數量?
問題是,有一個對象的實例,每次只能處理一個請求,並且Web請求在對象完成其作業之前到來。
如何爲這些請求創建某種「連接池」?或者有沒有其他方法可以限制對這個對象實例的訪問?
我在某些方法中使用了同步聲明,它做的很好,但問題在於它沒有排序。我怎樣才能控制這個方法的傳入請求的順序?
您可以嘗試使用synchronized關鍵字同步由所有請求線程共享的方法。 這樣做的缺點是會影響你的表演。 SO TRY保持同步塊較小。
您可以將這些請求視爲命令,並將它們存儲在隊列中並將它們逐個加1。然而,這對用戶(如前所述)產生的後果是響應時間會增加。爲了克服這一點,命令的處理可能是異步完成的,這意味着用戶將調用該命令並得到回答命令已被正確接收。一旦服務器完成處理命令,服務器就可以回叫用戶,通知他命令已被(成功)處理。
請注意,這可能會變成一個複雜的解決方案,它可能會更好地檢查您是否不能刪除/重構單例。
重新思考你的設計。限制請求(儘可能)對性能不利。 – Henry
你可以實現一個基本的對象池。 Apache有[commons pool](https://commons.apache.org/proper/commons-pool/),這應該有所幫助。 –
同步。信號燈。重新設計,所以沒有一個單一的對象。太寬泛。 – EJP