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 相关文章推荐
IE6与IE7中,innerHTML获取param的区别
Mar 15 Javascript
jQuery 中$(this).index与$.each的使用指南
Nov 20 Javascript
jQuery中insertBefore()方法用法实例
Jan 08 Javascript
PHP中CURL的几个经典应用实例
Jan 23 Javascript
JavaScript监听和禁用浏览器回车事件实例
Jan 31 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
Aug 11 Javascript
jQuery Ajax File Upload实例源码
Dec 12 Javascript
JS获取子、父、兄节点方法小结
Aug 14 Javascript
微信小程序实现图片翻转效果的实例代码
Sep 20 Javascript
JavaScript队列结构Queue实现过程解析
Mar 07 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
May 28 Javascript
谈谈JavaScript中的函数
Sep 08 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中Memcache操作类及用法实例
2014/12/12 PHP
10个简化PHP开发的工具
2014/12/25 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
python如何查看系统网络流量的信息
2016/09/12 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
Linux文件系统类型
2012/09/16 面试题
市场营销专业个人求职信范文
2013/12/14 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
暑期培训心得体会
2014/09/02 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
化验员岗位职责
2015/02/14 职场文书
义诊活动通知
2015/04/24 职场文书
加薪申请报告范本
2015/05/15 职场文书
雷锋的观后感
2015/06/10 职场文书
客户答谢会致辞
2015/07/30 职场文书