Alfresco JavaScript/Rhino多线程处理和并发
Alfresco JavaScript/Rhino multi-thread processing and concurrency
让我们考虑两个独立的Alfresco Rhino-JavaScript任务,它们竞争创建同一个文件夹:
var shared = companyhome.childByNamePath("shared");
var newFolderName = "folder-x";
var newFolder = shared.childByNamePath(newFolderName);
if (newFolder==null) {
java.lang.Thread.sleep(10000);//remove this line in second thread
newFolder = shared.createFolder(newFolderName);
if (newFolder==null){
logger.error("error: "+newFolderName);
} else {
logger.info("success: "+newFolderName);
}
} else {
logger.info("already exists: "+newFolderName);
}
如果我们运行带有sleep的第一个脚本(10秒),而第二个脚本没有sleep,那么:
- 第二个脚本将创建文件夹"folder-x"
- 第一个脚本将触发"File or folder folder-x already exists"异常
让我们想象有很多线程试图创建随机文件夹。是否有类似信号量或原子操作的东西,只阻塞创建指定的文件夹(非阻塞其他文件夹)?
对不起,我明白了,这是微不足道的…
方法createFolder()
是原子的,我们只需要处理异常,如果文件夹已经创建:
var getOrCreateFolder = function(parent, newFolderName){
var newFolder = parent.childByNamePath(newFolderName);
if (newFolder==null) {
try {
java.lang.Thread.sleep(10000);//remove this line in second thread
newFolder = parent.createFolder(newFolderName);
return {folder:newFolder,isNew:true};
} catch (e) {
newFolder = parent.childByNamePath(newFolderName);
if (newFolder!=null){
return {folder:newFolder,isNew:false};
} else {
throw e;
}
}
} else {
return {folder:newFolder,isNew:false};
}
};
var shared = companyhome.childByNamePath("shared");
var newFolderName = "folder-x";
var folderDto = getOrCreateFolder(shared,newFolderName);
if (folderDto.folder==null) {
logger.error("error: "+newFolderName);
} else {
logger.info("done: "+newFolderName+", new: "+folderDto.isNew);
}
相关文章:
- javascript中的多线程
- Javascript支持多线程吗
- Doppio:多线程是如何工作的,有什么限制吗
- 为什么Javascript SetTimeout()不是多线程的
- Node.js如何用一个线程处理同时请求
- 从多线程C++插件回调NodeJS Javascript函数
- 电子框架是否允许网络工作者进行多线程处理
- 如何使用并行/多线程Hamsters.js Javascript库编辑数组中的对象属性
- 是否可以使用多线程执行Javascript函数
- 使用不同选项卡的Javascript中的多线程
- IONIC是否支持用Java开发的多线程和调用jar库
- 纳肖恩多线程编程
- 节点JS单线程与多线程(CPU利用率:有什么区别吗?
- JavaScript 回调 - 多线程
- 有时,JavaScript是多线程的
- 使用多线程.js访问范围
- 这个 Web worker 代码是多线程的吗,我是否获得了什么
- Javascript 多线程两个窗口焦点
- Alfresco JavaScript/Rhino多线程处理和并发
- 处理javascript/jquery中的多线程问题