字符串Utils-Java
我创建了一个StringUtil类,用于整个应用程序的字符串验证。StringUtil的代码如下所示字符串Utils-Java,java,string,Java,String,我创建了一个StringUtil类,用于整个应用程序的字符串验证。StringUtil的代码如下所示 public class StringUtil { public static synchronized boolean isValidString(String string) { return string!= null && string.trim().length() > 0; } } 在这个类中,该方法检查字符串是否为有效字符串
public class StringUtil {
public static synchronized boolean isValidString(String string) {
return string!= null && string.trim().length() > 0;
}
}
在这个类中,该方法检查字符串是否为有效字符串。此方法是线程安全的。在企业应用程序中,可能有多个线程访问此方法。如果一个线程正在访问此方法,那么所有其他线程都必须等待轮到它。此方法反过来将非常频繁地用于检查字符串的空值。那么,哪一个是最好的选择
由于这里没有任何状态(只使用方法参数
string
),因此该方法本质上是线程安全的。因此,不需要使用synchronized
关键字
如果该方法在整个项目中都使用,那么最好的选择就是像您已经做的那样声明它为静态。因为您在这里没有任何状态(您只使用方法参数
字符串
),所以该方法本质上是线程安全的。因此,不需要使用synchronized
关键字
如果该方法在整个项目中都使用,那么最好的选择就是像您已经做的那样声明它
static
。您可以尝试Apache Commons中的util类
但无论如何,这里都有线程安全性,因为您没有处理其他调用可能读取的类中的任何内容(即,您没有状态)。您可以尝试Apache Commons中的util类
但无论如何,这里都有线程安全,因为您没有操作类中其他调用可能读取的任何内容(即,您没有状态)。像这样的帮助器方法通常是
公共静态方法,而不是同步方法,因为类不保持状态。因为它也不保持状态,所以不需要池
我认为apache commons类就是一个很好的例子
我有一种感觉,你试图用一个中子炮来打开一个核桃,简单就是王道:)通常像这样的助手方法是公共静态的,而不是同步的,因为类不保持状态。因为它也不保持状态,所以不需要池
我认为apache commons类就是一个很好的例子
我有种感觉,你试图用中子炮来打开核桃,简单就是王道:)这个方法不应该同步,因为它不使用任何类级变量。因此,多个线程可以同时访问它,而不会出现任何问题
此外,在为运行到容器中的企业应用程序编写代码时,请忘记同步。注意线程安全是容器的责任<代码>已同步
块只会干扰容器完成其工作。如果您需要在企业应用程序中进行同步,请重新考虑您的设计和/或找到其他模式(有很多)来解决您的问题。此方法不应同步,因为它不使用任何类级变量。因此,多个线程可以同时访问它,而不会出现任何问题
此外,在为运行到容器中的企业应用程序编写代码时,请忘记同步。注意线程安全是容器的责任<代码>已同步
块只会干扰容器完成其工作。如果您需要在企业应用程序中进行同步,请重新考虑您的设计和/或找到其他模式(有很多)来解决您的问题。您可能应该在Apache Commons中使用该类 您可能应该在Apache Commons中使用该类 不需要synchronized
关键字,因为字符串是
不可变对象通常很有用,因为它们本质上是线程安全的
public static boolean isValidString(String string) {
return !(string== null || string.isEmpty()); //Since 1.6
}
因为字符串是空的,所以不需要synchronized
关键字
不可变对象通常很有用,因为它们本质上是线程安全的
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项:使用私有构造函数强制不可实例化)实用程序类通常只包含静态方法,因此最好明确声明这些类不是为实例化而设计的。因此,将其构造函数设置为私有:
public class StringUtils {
private StringUtils() {
throw new AssertionError("shouldn't be instantiated");
}
}
(请参见Joshua Bloch的:第4项:使用私有构造函数强制不可实例化)那么“”在应用程序中不是有效字符串吗?我会选择isEmpty/NoteEmpty方法,谁知道“”什么时候会成为有效字符串呢……我同意字符串是不可变的。如果两个线程同时调用这些函数,而另一个线程调用一个null和一个有效字符串,那么线程安全问题将如何解决?…该方法可能也应该重命名<代码>“
实际上是一个有效字符串(在您的用例上下文中可能不是)。isPresent
或isNotEmpty
怎么样?因为这是类方法,所以多个线程只会这样调用(我假设)StringUtil.isValidString(null)(Thread1)StringUtil.isValidString(“SampleString”)(Thread2)这里的状态不是共享的,方法是共享的。那么我们将如何解决线程安全问题。实际上,它不仅仅是一个类方法,它是一个静态类方法。它计划在不分配新对象的情况下使用