同步字符串值

时间:2015-06-28 07:15:50

标签: java synchronization

假设我有一个为Web应用程序创建新用户的方法。该方法本身调用一个静态助手类,该类创建一个SQL语句,用于执行实际插入到我的数据库中。

public void createUserInDb(String userName){
    SQLHelper.insertUser(userName);
}

我希望同步此方法,使得如果传入的参数(userName)在这些线程上相同,则不能由不同的线程同时调用它。我知道我可以使用synchronized关键字同步方法执行,但这会阻止不同的线程同时执行该方法。如果传入的变量相同,我只想防止并发执行。 Java中有一个简单的构造可以让我这样做吗?

1 个答案:

答案 0 :(得分:6)

无法保证具有相同值的两个字符串指向Java中的同一实例,尤其是如果它们是从用户输入创建的。

但是,您可以使用intern()方法轻松强制它们进入字符串池,这样可以保证它与使用的实例相同:

public void createUserInDb(String userName){
    String interned = userName.intern();
    synchronized (interned) {
        SQLHelper.insertUser(interned);
    }
}