我已经创建了一个StringUtil类,用于在整个应用程序中进行一些字符串验证。 StringUtil的代码如下,
public class StringUtil {
public static synchronized boolean isValidString(String string) {
return string!= null && string.trim().length() > 0;
}
}
在此类中,该方法检查字符串是否为有效字符串。此方法是线程安全的。在企业应用程序中,可能有多个线程访问此方法。如果一个线程正在访问此方法,那么所有其他线程都必须等待轮到它。反过来,此方法将非常频繁地用于检查字符串是否为空值。那么哪个是最好的选择
答案 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项:使用私有构造函数强制实现不可实现性)