jas*_*man 7 java synchronization
假设我有一个为Web应用程序创建新用户的方法.该方法本身调用一个静态助手类,该类创建一个SQL语句,用于执行实际插入到我的数据库中.
public void createUserInDb(String userName){
SQLHelper.insertUser(userName);
}
Run Code Online (Sandbox Code Playgroud)
我希望同步此方法,以便如果传入的参数(userName
)在这些线程上相同,则不能由不同的线程同时调用它.我知道我可以使用synchronized关键字同步方法执行,但这会阻止不同的线程同时执行该方法.如果传入的变量相同,我只想防止并发执行.Java中有一个简单的构造可以让我这样做吗?
无法保证具有相同值的两个字符串将指向Java中的同一实例,尤其是如果它们是从用户输入创建的.
但是,您可以使用该intern()
方法轻松地将它们强制进入字符串池,这将保证它与使用的实例相同:
public void createUserInDb(String userName){
String interned = userName.intern();
synchronized (interned) {
SQLHelper.insertUser(interned);
}
}
Run Code Online (Sandbox Code Playgroud)