熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

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

2013-11-23 19:51:23  來源: Java高級技術 

  Java多線程在我們盡情的使用中存在著很多的問題首先就是如何解決主線的阻塞問題看完下面的代碼希望你對此有所啟發在不斷的學習中才能有更好的技術突破Java多線程防止主線阻塞代碼如下

  if(egetSource()==startItem)

  {//運行多線程爬蟲

  stateLabelsetText(運行中);

  try {

  URL url_url=new URL(web_url);

  web_host=url_urlgetHost();

  } catch (MalformedURLException e) {

  eprintStackTrace();

  }

  if(tpool==null)

  {

  // Systemoutprintln(運行);

  new Thread(

  new Runnable(){

  public void run()

  {

  //要在另一個線程做得事情

  // Systemoutprintln(啦啦啦啦);

  tpool=new ThreadPoolExecutor(minNmaxNaliveT

  TimeUnitSECONDS

  new LinkedBlockingQueue<Runnable>()/*

  new ThreadPoolExecutorCallerRunsPolicy()*/);

  //editor_panesetText(創建線程池:<br>);

  String tempstr=<hr> +

  創建線程池: +

  <br>設置最小線程數目+minN+

  <br>設置最大線程數目+maxN+

  <br>設置空閒線程存活時間(秒)+aliveT+

  <br>設置阻塞線程隊列大小為+blockQN+

  <hr> +

  設置本地映射目錄為 +

  <br>+dir_path+

  <hr> +

  <br>爬取入口網頁為 +

  <br>+web_url+<hr>;

  setEditorContent(falsetempstr);

  addToUnProQ(web_url);

  String geturl=null;

  getPage gt=null;

  while((!isUnProQEmpty())||!tpoolisTerminated())

  //有沒有處理的連接或者tpool沒有結束

  {//如果 還有連接沒有被處理

  geturl=delFromUnProQ();

  if(geturl!=null)

  {

  addToProQ(geturl);

  gt=new getPage(geturl);

  tpoolexecute(gt);

  }

  try {//等待秒 以便在隊列中能夠有更多的鏈接

  Threadsleep((long)(Mathrandom()*));

  } catch (InterruptedException e) {

  eprintStackTrace();

  }

  }

  tpoolshutdown();

  tpool=null;

  stateLabelsetText(歡迎使用本網站結構分析軟件);

  //setEditorContent(trueshuoming);

  }

  })start();

  }

  else

  {

  showMessageBox(已經開始運行了不要亂按了

  閒得慌就到網站看文章去吧);

  String comd = explorer ;

  try {

  RuntimegetRuntime()exec(comd);

  } catch (IOException e) {

  eprintStackTrace();

  }

  }

  }

  以上就是對Java多線程代碼的相關介紹希望大家有所收獲


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27572.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.