Java多线程如何防止主线的阻塞

日期: 2010-03-16 来源:TechTarget中国 英文

  Java多线程在我们尽情的使用中存在着很多的问题,首先就是如何解决主线的阻塞问题。看完下面的代码希望你对此有所启发。在不断的学习中才能有更好的技术突破。Java多线程防止主线阻塞代码如下:

以下是引用片段:
if(e.getSource()==startItem)
  {//运行多线程爬虫  stateLabel.setText(“运行中….”);
  try {  URL url_url=new URL(web_url);
  web_host=url_url.getHost();
  } catch (MalformedURLException e2) {  e2.printStackTrace();
  }  if(tpool==null)  {  // System.out.println(“运行”);
  new Thread(  new Runnable(){   public void run()
   {  //要在另一个线程做得事情  // System.out.println(“啦啦啦啦”);
  tpool=new ThreadPoolExecutor(minN,maxN,aliveT,  TimeUnit.SECONDS,
  new LinkedBlockingQueue<Runnable>()/*,  new ThreadPoolExecutor.CallerRunsPolicy()*/);
  //editor_pane.setText(“创建线程池:<br>”);
  String tempstr=”<hr>” 
+  “创建线程池:” 
+  “<br>设置最小线程数目:”+minN+  “<br>设置最大线程数目:”+maxN+  “<br>设置空闲线程存活时间(秒):”+aliveT+  “<br>设置阻塞线程队列大小为:”+blockQN+  “<hr>” 
+  “设置本地映射目录为:” 
+  “<br>”+dir_path+  “<hr>” 
+  “<br>爬取入口网页为:”
 +  “<br>”+web_url+”<hr>”;
  setEditorContent(false,tempstr);
  addToUnProQ(web_url);
  String geturl=null;
  getPage gt=null;
  while((!isUnProQEmpty())||!tpool.isTerminated())//有没有处理的连接或者tpool没有结束 
 {//如果 还有连接没有被处理
  geturl=delFromUnProQ();
  if(geturl!=null)  {  addToProQ(geturl);
  gt=new getPage(geturl);
  tpool.execute(gt);
  }  try {//等待0.2秒 以便在队列中能够有更多的链接  Thread.sleep((long)(Math.random()*200));  } catch (InterruptedException e1) {  e1.printStackTrace();
  }  }  tpool.shutdown(); 
 tpool=null;
  stateLabel.setText(“欢迎使用本网站结构分析软件”);
  //setEditorContent(true,shuoming);
  }   }).start();
  }  else  {  showMessageBox(“已经开始运行了….”);
  String comd = “explorer http://www.blesslucky.com/”;
  try {  Runtime.getRuntime().exec(comd);
  } catch (IOException e1) {  e1.printStackTrace();
  }   }  } 

以上就是对Java多线程代码的相关介绍,希望大家有所收获。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国