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

java破解ip屏蔽+多線程同步撥號

2013-11-23 18:49:56  來源: Java核心技術 

  單線程 破解ip屏蔽 比較容易 只要撥號就行了

  多線程抓取數據也比較容易 但是引入多線程之後 撥號就容易出現問題

  多線程抓取的時候這個撥號就比較麻煩一點 因為多線程撥號

  會出現 第一個線程撥號的時候第二個線程也同時進入撥號第三個  個  同樣會進入 這樣會導致線程一直在撥號 導致無限循環

  怎麼控制這個撥號同步達到較高的效率呢

  本人是新手 采用了比較簡單的方法

  就是第一個開始撥號 就告訴後面的我已經在撥號了

  你們反正抓取不了數據那就先等一等等我第一個撥號完畢大家所有線程在進行下一輪的循環抓取數據

  線程類

  其中

  AdslTheadisadsl = true; 就是用來設置告訴後面的線程已經有人在撥號了

  package comyjfutil;

  import javautilDate;

  import javautilList;

  public class GetWebThread extends Thread{

  /**

  * 線程

  */

  public void run(){

  try {

  while (true) {

  int day = ;

  long time = new Date()getTime()

  //用來同步抓取線程

  synchronized(searchthead){

  Mainthisdaycount++;

  if(Mainthisdaycount>Maindaycount){

  break;

  }

  Systemoutprintln(開始查詢第+(Mainthisdaycount)+

  Threadsleep(

  day = Mainthisdaycount;

  }

  //獲取抓取的時間

  String datetext = TimeUtildateformat(TimeUtiladdDaysForDate(day))

  String[] txt =FileUtilgetCityByTxtFile()

  for(int t=;t<txtlength;t++){

  String[] way = txt[t]split(\\|

  String start = way[];

  String end = way[];

  //抓取到的數據列表

  List<DataBean> datalist = MaingetDataList(datetext start end)

  if(datalist!=null){

  Mainisadsl = ;

  CheckAdsladsllasttime = new Date()getTime()

  FileUtiladdDataToFileCsv(datalist)

  MainlogprintLog(====+datetext+=+start+=+end+=+t+=數據總數+datalistsize())

  }else{

  Threadsleep(

  AdslTheadisadsl = true;

  Threadsleep(

  //判斷是否正在撥號 並暫停線程

  while (AdslTheadisadsl) {

  Threadsleep(

  }

  t;

  }

  }

  long time = new Date()getTime()

  MainlogprintLog(datetext+==查詢完畢=========耗時+(timetime))

  }

  } catch (Exception e) {

  MainlogprintLog(egetMessage())

  eprintStackTrace()

  }

  }

  }

  撥號監聽線程

  package comyjfutil;

  import javautilDate;

  import javautilTimerTask;

  public class AdslThead extends TimerTask{

  public static boolean isadsl = false;

  @Override

  public void run() {

  try {

  if(isadsl){

  Systemoutprintln(撥號線程線程啟動

  ConnectAdslNetreconnectAdsl(寬帶MainadslnameMainadslpass)

  isadsl = false;

  }

  } catch (Exception e) {

  Systemoutprintln(egetMessage())

  }

  }

  }

  啟動撥號監聽程序  每隔一段時間循環一次 這樣穩定性准確性更高

  Timer adsl=new Timer()

  adslschedule(new AdslThead()*//啟動撥號檢測線程


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