JS模拟多线程


Posted in Javascript onFebruary 07, 2007
var Thread = {
 runNum : 0,  //当前正式运行的线程数
 maxNum : 10, //最大同时执行的线程数 -1表示不限
 commandList : new Array(), 
 start : function(){
  //window.status = this.runNum; 
  if(this.maxNum != -1 && this.runNum >= this.maxNum){   
   return; 
  }
  if(this.commandList.length <= 0){  
   this.runNum = 0;
   return false; 
  }  
  this.runNum++;
  var _this =this;  
  var tFun = function(){
   if(!_this.commandList[0]) return;
   var command = _this.commandList[0].shift();   
   command.apply(_this,_this.commandList[0].concat(
    function(){  //alert(2)     
     if(_this.runNum > 0)_this.runNum--; 
     setTimeout(function(){_this.start.apply(_this)},1);     
    }));
   _this.commandList.shift(); 
  }
  setTimeout(tFun,1);  
  setTimeout(function(){_this.start.apply(_this)},10);
 }
}

<script src="prototype.js"></script>
<script type="text/javascript" defer="defer">
function test(obj,info,callback){ 
 callback = callback || new Function();
 new Ajax.Request('test.xml',{method:'get',
  onSuccess:function(o){

   $(obj).innerHTML += info + '完成<br>';
   callback('完成');
  },
  onFailure : function(o){
   $(obj).innerHTML += info + '失败<br>';
   callback('失败');
  },
  onComplete : function(o){
   document.body.scrollTop = 9999;
  }
 });
}

var Thread = {
 runNum : 0,  //当前正式运行的线程数
 maxNum : 5, //最大同时执行的线程数 -1表示不限
 commandList : new Array(), 
 start : function(){
  //window.status = this.runNum; 
  if(this.maxNum != -1 && this.runNum >= this.maxNum){   
   return; 
  }
  if(this.commandList.length <= 0){  
   this.runNum = 0;
   return false; 
  }  
  this.runNum++;
  var _this =this;  
  var tFun = function(){
   if(!_this.commandList[0]) return;
   var command = _this.commandList[0].shift();   
   command.apply(_this,_this.commandList[0].concat(
    function(){  //alert(2)     
     if(_this.runNum > 0)_this.runNum--; 
     setTimeout(function(){_this.start.apply(_this)},1);     
    }));
   _this.commandList.shift(); 
  }
  setTimeout(tFun,1);  
  setTimeout(function(){_this.start.apply(_this)},10);
 }
}

for(var i = 0; i < 100 ; i++){
 Thread.commandList.push(new Array(test,document.body,i+1));
};
Thread.start();
</script>
<body>
</body>

Javascript 相关文章推荐
Js event事件在IE、FF兼容性问题
Jan 01 Javascript
js优化针对IE6.0起作用(详细整理)
Dec 25 Javascript
如何动态的导入js文件具体该怎么实现
Jan 14 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
Aug 22 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
Aug 24 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
May 19 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
canvas实现流星雨的背景效果
Jan 13 Javascript
javascript 操作cookies详解及实例
Feb 22 Javascript
angular.js+node.js实现下载图片处理详解
Mar 31 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
May 10 Javascript
使用prototype.js进行异步操作
Feb 07 #Javascript
最新优化收藏到网摘代码(digg,diigo)
Feb 07 #Javascript
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
Feb 05 #Javascript
js滚动条多种样式,推荐
Feb 05 #Javascript
如何在标题栏显示框架内页面的标题
Feb 03 #Javascript
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
Feb 03 #Javascript
使用JS操作页面表格,元素的一些技巧
Feb 02 #Javascript
You might like
利用PHP创建动态图像
2006/10/09 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
Js+XML 操作
2006/09/20 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
几行js代码实现自适应
2017/02/24 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
微信小程序select下拉框实现源码
2019/11/08 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python模块文件结构代码详解
2018/02/03 Python
python将list转为matrix的方法
2018/12/12 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
Sony C++笔试题
2013/03/10 面试题
关键字throw与throws的用法差异
2016/11/22 面试题
中西医专业毕业生职业规划书
2014/02/24 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
2015年外联部工作总结
2015/04/03 职场文书
公司备用金管理制度
2015/08/04 职场文书
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android