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的基本类型和引用类型
Nov 16 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
JQuery导航菜单选择特效
Apr 11 Javascript
浅谈Cookie的生命周期问题
Aug 02 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
three.js中3D视野的缩放实现代码
Nov 16 Javascript
jQuery实现动态加载select下拉列表项功能示例
May 31 jQuery
Vue中使用vux配置代码详解
Sep 16 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
JavaScript创建、读取和删除cookie
Sep 03 Javascript
浅谈bootstrap layer.open中end的使用方法
Sep 12 Javascript
JavaScript中作用域链的概念及用途讲解
Aug 06 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中函数前加&amp;符号的作用分解
2014/07/08 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
2013/10/24 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
Python常用模块介绍
2014/11/21 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
Python和Go语言的区别总结
2019/02/20 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
Python 切分数组实例解析
2019/11/07 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
大学生毕业鉴定
2014/01/31 职场文书
高校教师自荐信范文
2014/03/13 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
八年级历史教学反思
2016/02/19 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis