在我的应用我有以下代码:双ckecked锁定网络电话
Folders[] folders = getFolders();
Folder folder = resolveFolder(folders,pattern);
if(folder == null){
if(createFolderOn()){
synchronized(lock){
folders = getFolders(); //here I Am refreshing the folders array. This is needed because some other thread might have already created the folder.
folder = resolveFolder(folders,pattern);
if(folder == null){
createFolder();
}
}
}
}
getFolders()
和createFolder()
确实是网络电话。当每个线程通过网络操作加载数据时,执行这种双重检查锁定是否正确?这个想法并不是一次创建与该模式相对应的相同文件夹。提供程序保证该文件夹在创建后立即返回,因此getFolders()
和createFolder()
是同步调用。
编辑 忘了提及我无法控制文件夹提供程序。它不限制文件夹创建(可以多次创建具有相同名称的文件夹)。由于我的要求禁止文件夹重复我推出了上述方法
我忘了提及我无法控制文件夹提供程序。它不限制文件夹创建(可以多次创建具有相同名称的文件夹)。由于我的要求禁止文件夹重复我引入了上述方法。无论如何,我同意如果可以实现,它应该是这样做的。 –
你可能想用这些信息来提高你的问题。 – GhostCat
@DeyanG。如果文件夹是按名称标识的,如何创建具有相同名称的多个文件夹?如果可以有多个“folderA”,如何知道在访问“folderA”时会得到哪一个?有些东西在这里没有意义。 –