String Utils - Java

时间:2012-09-14 08:27:13

标签: java string

我已经创建了一个StringUtil类,用于在整个应用程序中进行一些字符串验证。 StringUtil的代码如下,

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

}

在此类中,该方法检查字符串是否为有效字符串。此方法是线程安全的。在企业应用程序中,可能有多个线程访问此方法。如果一个线程正在访问此方法,那么所有其他线程都必须等待轮到它。反过来,此方法将非常频繁地用于检查字符串是否为空值。那么哪个是最好的选择

  1. 使这成为单身和线程安全
  2. 将其作为实例方法
  3. 是否有任何其他方法可以使用此类型的对象组织池,并且每个线程都会拾取一个并在完成后将对象释放到池中。因此,线程安全性不是问题,也不会创建对象。
  4. 是否有相同的开源库。

7 个答案:

答案 0 :(得分:15)

由于此处没有任何状态(您只使用方法参数string),因此该方法本身就是线程安全的。因此,无需使用synchronized关键字。

如果在整个项目中使用该方法,则只需将其声明为static,这是最佳选择。

答案 1 :(得分:7)

通常这样的辅助方法是public static,而不是synchronized,因为类不保持状态。由于它既不保持状态,也不需要池。

我认为这是一个很好的例子,apache commons StringUtils class。

我觉得你正在尝试使用中子加农炮打开核桃,简单就是王道:)

答案 2 :(得分:2)

您可以尝试使用Apache Commons中的util类。

但无论如何你都有线程安全,因为你没有操纵其他调用可能读取的类中的任何东西(即你没有状态)。

答案 3 :(得分:2)

您应该在Apache Commons中使用StringUtils类。

答案 4 :(得分:1)

此方法不应同步,因为它不使用任何类级别变量。因此,多个线程可以同时访问它而没有任何问题。

此外,在为正在运行到容器中的企业应用程序编写代码时,请忘记同步。关心线程安全是容器的责任。 synchronized阻止只是打扰容器来完成它的工作。如果您需要在企业应用程序中进行同步,请重新考虑您的设计和/或找到其他模式(有很多)来解决您的问题。

答案 5 :(得分:1)

由于String为immutable object

,因此无需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
}

答案 6 :(得分:1)

实用程序类通常只包含静态方法,因此最好明确声明这些类不是为实例化而设计的。因此,使他们的构造函数私有:

public class StringUtils {

  private StringUtils() {
    throw new AssertionError("shouldn't be instantiated");
  }

}

(参见 Joshua Bloch Bible:第4项:使用私有构造函数强制实现不可实现性)