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 相关文章推荐
对JavaScript的eval()中使用函数的进一步讨论
Jul 26 Javascript
JavaScript 原型学习总结
Oct 29 Javascript
jquery1.10给新增元素绑定事件的方法
Mar 06 Javascript
jQuery()方法的第二个参数详解
Apr 29 Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 Javascript
bootstrap组件之导航组件使用方法
Jan 19 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
Jul 24 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
Jul 26 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
Feb 17 Javascript
layui监听工具栏的实例(操作列表按钮)
Sep 10 Javascript
layui 地区三级联动 form select 渲染的实例
Sep 27 Javascript
jQuery实现数字华容道小游戏(实例代码)
Jan 16 jQuery
使用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
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
php数组添加元素方法小结
2014/12/20 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
使用PHP开发留言板功能
2019/11/19 PHP
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
jqTransform美化表单
2015/10/10 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
python 录制系统声音的示例
2020/12/21 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
数控技术专科生自我评价
2014/01/08 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
宣传标语大全
2014/07/01 职场文书
公司承诺书格式范文
2015/04/28 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
python常见的占位符总结及用法
2021/07/02 Python
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python