JS模拟多线程

 更新时间:2007年02月07日 00:00:00   作者:  
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>

相关文章

  • JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】

    JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】

    这篇文章主要介绍了JS实现屏蔽网页右键复制及ctrl+c复制的方法,结合实例形式分析了2种比较常用的屏蔽复制功能的技巧,需要的朋友可以参考下
    2016-09-09
  • 微信小程序实现翻牌抽奖动画

    微信小程序实现翻牌抽奖动画

    这篇文章主要为大家详细介绍了微信小程序实现翻牌抽奖动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • javascript设计模式 – 观察者模式原理与用法实例分析

    javascript设计模式 – 观察者模式原理与用法实例分析

    这篇文章主要介绍了javascript设计模式 – 观察者模式,结合实例形式分析了javascript观察者模式相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • JavaScript JSON.stringify()的使用总结

    JavaScript JSON.stringify()的使用总结

    JSON是一种轻量级数据格式,可以方便地表示复杂数据结构。JSON对象有两个方法:stringify()和parse()。在简单的情况下,这两个方法分别可以将JavaScript序列化为JSON字符串,以及将JSON解析为原生JavaScript值。本文着重介绍JSON.stringify()的使用方法和注意事项。
    2021-05-05
  • 简单js代码实现selece二级联动(推荐)

    简单js代码实现selece二级联动(推荐)

    这篇文章主要介绍了简单js代码实现selece二级联动的简单实例。需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • JavaScript数据结构与算法之栈详解

    JavaScript数据结构与算法之栈详解

    栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表,也成称为先进后出表,下面这篇文章主要给大家介绍了关于JavaScript数据结构与算法之栈的相关资料,需要的朋友可以参考下
    2022-06-06
  • JS面试题之forEach能否跳出循环详解

    JS面试题之forEach能否跳出循环详解

    js中经常会使用foreach这个方法来遍历数组,这篇文章主要给大家介绍了关于JS面试题之forEach能否跳出循环的相关资料,需要的朋友可以参考下
    2021-06-06
  • JS实现加载时锁定HTML页面元素的方法

    JS实现加载时锁定HTML页面元素的方法

    这篇文章主要介绍了JS实现加载时锁定HTML页面元素的方法,涉及javascript针对页面元素的遍历与属性操作相关实现技巧,需要的朋友可以参考下
    2017-06-06
  • UniApp中Scroll-View设置占满下方剩余高度的方法记录

    UniApp中Scroll-View设置占满下方剩余高度的方法记录

    在使用uniapp开发项目过程中有时候会想让一些组件占有屏幕剩余的高度,下面这篇文章主要给大家介绍了关于UniApp中Scroll-View设置占满下方剩余高度的方法,需要的朋友可以参考下
    2023-04-04
  • js判断复选框是否选中及选中个数的实现代码

    js判断复选框是否选中及选中个数的实现代码

    下面小编就为大家带来一篇js判断复选框是否选中及选中个数的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05

最新评论