簡體   English   中英

字符串實用程序-Java

[英]String Utils - Java

我創建了一個StringUtil類,該類用於整個應用程序中的某些字符串驗證。 StringUtil的代碼如下所示,

public class StringUtil {
    public static synchronized boolean isValidString(String string) {
        return string!= null && string.trim().length() > 0;
    }

}

在此類中,該方法檢查字符串是否為有效字符串。 此方法是線程安全的。 在企業應用程序中,可能有多個線程訪問此方法。 如果某個線程正在訪問此方法,則所有其他線程都必須等待其運行。 反過來,此方法將非常頻繁地用於檢查字符串是否為空值。 那是最好的選擇

  1. 確保單身和線程安全
  2. 將其作為實例方法
  3. 還有沒有其他方法可以用這種類型的對象來組織一個池,每個線程都會拾取一個對象並在完成后將對象釋放到池中,因此不必擔心線程安全並且也不會創建對象。
  4. 是否有相同的開源庫。

由於此處沒有任何狀態(您僅使用方法參數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.

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