明智地創建新對象並使用相同的對象實例而不是創建新對象是明智的。在下面的情況下,我對確定創建對象的解決方案並不十分有信心。有一個SOAP服務類有幾種方法來負責多個客戶。請參閱模板下面,Java設計模式:Factory vs Singleton?在多線程的情況下
Public class SOAPService {
public Object getProductList(String CustId, String endPoint){
SOAPStub stub = new SOAPStub(endPoint);
Object productList = stub.getProductList();
return productList;
}
public Object getProductInfo(String CustId, String productId, String endPoint){
SOAPStub stub = new SOAPStub(endPoint);
Object productInfo = stub.getProductList(productId);
return productInfo;
}
}
現在我介紹一個工廠方法爲每個客戶創建對象,並把它放在一個地圖,但我很困惑,當單個客戶的多個線程將訪問該服務類。對象的行爲不會像單身或可能導致任何死鎖問題,或讓線程等待?請在此指導我。
Public class SOAPService {
private Map<String, SOAPStub> map = new HashMap<String, SOAPStub>();
public SOAPStub getSOAPObject(String CustId, String endPoint){
if(map.containsKey(CustId))
return map.get(CustId);
else{
SOAPStub stub = new SOAPStub(endPoint);
map.put(custId, stub);
return stub;
}
}
public Object getProductList(String CustId, String endPoint){
SOAPStub stub = getSOAPObject(CustId, endPoint);
Object productList = stub.getProductList();
return productList;
}
public Object getProductInfo(String CustId, String productId, String endPoint){
SOAPStub stub = getSOAPObject(CustId, endPoint);
Object productInfo = stub.getProductList(productId);
return productInfo;
}
}
這是一個很好的解決方案,但是如果同一個對象的兩個線程發送請求 – Bibhaw
請不要延遲響應請擴展您的問題。你認爲可能會延遲到哪裏? –
Eugene,假設我有一個customer_1,其中2個請求線程同時分派,並且假設Thread_1請求正在處理中,並且thread_2將等待對象實例,直到thread_1完成並釋放任務。這就是我想說的對線程2的響應延遲。 但是當我們有一個系統爲每個請求創建對象時,Thread-1和thread_2請求將擁有自己的對象,並且不需要等待釋放該對象。你說的話 ? – Bibhaw