[英]String Utils - Java
我創建了一個StringUtil類,該類用於整個應用程序中的某些字符串驗證。 StringUtil的代碼如下所示,
public class StringUtil {
public static synchronized boolean isValidString(String string) {
return string!= null && string.trim().length() > 0;
}
}
在此類中,該方法檢查字符串是否為有效字符串。 此方法是線程安全的。 在企業應用程序中,可能有多個線程訪問此方法。 如果某個線程正在訪問此方法,則所有其他線程都必須等待其運行。 反過來,此方法將非常頻繁地用於檢查字符串是否為空值。 那是最好的選擇
由於此處沒有任何狀態(您僅使用方法參數string
),因此該方法本質上是線程安全的。 因此,無需使用synchronized
關鍵字。
如果在整個項目中都使用該方法,那么最好將其聲明為static
是最好的選擇。
通常這樣的輔助方法是public static
,而不是synchronized
,因為該類不持有狀態。 由於它也不保持狀態,因此不需要池。
我認為這是apache commons StringUtils類的一個很好的例子。
我感覺到您正在嘗試使用中子大炮打開胡桃木,簡單為王:)
您可以嘗試來自Apache Commons的util類。
但是無論如何,您這里都具有線程安全性,因為您沒有在該類中操縱其他調用可能讀取的任何內容(即您沒有狀態)。
您可能應該在Apache Commons中使用StringUtils
類。
此方法不應同步,因為它不使用任何類級別的變量。 因此,多個線程可以並發訪問它而沒有任何問題。
此外,當您為運行在容器中的企業應用程序編寫代碼時,會忘記同步。 關心螺紋安全是容器的責任。 synchronized
塊只會打擾容器來完成其工作。 如果您需要在企業應用程序中進行同步,請重新考慮您的設計和/或查找其他方法(有很多方法)來解決您的問題。
字符串是不可變的對象,因此不需要synchronized
關鍵字
Immutable objects are often useful because they are inherently thread-safe
public static boolean isValidString(String string) {
return !(string== null || string.isEmpty()); //Since 1.6
}
實用工具類通常僅包含靜態方法,因此,最好明確聲明這些類並非旨在實例化 。 因此,將其構造函數設為私有:
public class StringUtils {
private StringUtils() {
throw new AssertionError("shouldn't be instantiated");
}
}
(請參閱約書亞·布洛赫 ( Joshua Bloch)的 《 聖經》 :第4項:使用私有構造函數強制執行非不穩定性)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.