簡體   English   中英

網絡連接失敗時如何處理Java Singletons?

[英]How do you handle Java Singletons when a network connection fails?

我為我的課程創建了一個Singleton,其中包含MemcachedClient實例(這可以是需要與服務器建立連接的任何對象,但是我提供了一個具體的示例)。 我在靜態init塊中初始化MemcachedClient。 如果MemcachedClient由於連接錯誤而無法創建實例,則這意味着我的類沒有用,因為它具有空的MemcachedClient實例。

我的問題:針對這種情況的最佳解決方案是什么? 其他人如何處理這種情況?

問題(如標題中所述)過於廣泛,取決於單例的用途。

對於您而言,一個顯而易見的問題是:如果初始化失敗,您是否可以期望該問題在不久的將來得到解決? 繼續嘗試(重新設計,使您的應用程序不會以奇怪的方式崩潰)的成本是多少?

如果您不希望錯誤容易解決,請使您的應用程序崩潰(使用正確的日志/警報/通知)。 如果您希望它繼續運行直到問題解決,那么步驟將是:

1)將初始化傳遞給單例的構造函數(如果可以控制對構造函數的訪問,為什么將其放在靜態塊中)。

2a)當構造函數失敗時,對getInstance調用將返回null。 修改您的應用程序使其能夠處理它。

2b)如果存在問題,請創建一個沒有適當初始化的單例。 在解決初始化問題/對象已初始化之前,對該對象方法的調用將不執行任何操作。 修改您的應用程序,使其能夠處理這些虛擬方法。 這種方法比較快捷,但方法比較復雜。

3)當請求一個新實例(如果是2a)或調用了一個方法(如果是2b)時,請再次檢查對象是否可以初始化。

將所有以前的成本與解決問題后僅重新啟動應用程序的成本進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM