JS模拟多线程

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>

相关推荐