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>