java破解ip屏蔽+多线程同步-【多线程数据采集之五】。   到今天为止,算是讲完了一部分了。

多线程数据采集系列   整个过程就是:  抓取,分析,破解屏蔽,多线程, 多线程数据同步以及拨号同步。

上面几回,讲到了。 单线程 破解ip屏蔽。 比较容易。 只要拨号就行了。

多线程抓取数据也比较容易, 但是引入多线程之后。 拨号就容易出现问题。

多线程抓取的时候,这个拨号就比较麻烦一点。 因为,多线程拨号,

会出现: 第一个线程拨号的时候,第二个线程也同时进入拨号,第三个  4个  同样会进入。 这样会导致线程一直在拨号。 导致无限循环。

怎么控制这个拨号同步,达到较高的效率呢。

本人是新手, 采用了比较简单的方法。

就是,第一个开始拨号, 就告诉后面的,我已经在拨号了。

你们反正抓取不了数据,那就先等一等,等我第一个拨号完毕,大家所有线程在进行下一轮的循环抓取数据。

七七八八网http://www.qi788.com

转载文章,请注明出处。http://blog.csdn.net/yjflinchong

源码如下:

1、线程类

其中:

AdslThead.isadsl = true; 就是用来设置,告诉后面的线程,已经有人在拨号了。
package com.yjf.util; import java.util.Date; import java.util.List;   public class GetWebThread extends Thread{       /**      * 线程    */     public void run(){      try {           while (true) {              int day = 0;               long time1 = new Date().getTime();                 //用来同步抓取线程              synchronized("searchthead"){                  Main.thisdaycount++;                  if(Main.thisdaycount>Main.daycount){                         break;                  }                   System.out.println("开始查询第"+(Main.thisdaycount)+"天");                  Thread.sleep(133);                  day = Main.thisdaycount-1;                 }               //获取抓取的时间               String datetext = TimeUtil.date.format(TimeUtil.addDaysForDate(day));              String[] txt =FileUtil.getCityByTxtFile();                 for(int t=0;t<txt.length;t++){                    String[] way = txt[t].split("\\|");                  String start = way[0];                     String end = way[1];                   //抓取到的数据列表                  List<DataBean> datalist = Main.getDataList(datetext, start, end);                    if(datalist!=null){                        Main.isadsl = 0;                       CheckAdsl.adsllasttime = new Date().getTime();                         FileUtil.addDataToFileCsv(datalist);                        Main.log.printLog("===="+datetext+"="+start+"="+end+"="+t+"=数据总数:"+datalist.size());                  }else{                          Thread.sleep(11);                           AdslThead.isadsl = true;                           Thread.sleep(11);                           //判断是否正在拨号 并暂停线程                            while (AdslThead.isadsl) {                              Thread.sleep(5000);                             }                       t--;                    }               }               long time2 = new Date().getTime();                 Main.log.printLog(datetext+"==查询完毕=========耗时"+(time2-time1));           }       } catch (Exception e) {             Main.log.printLog(e.getMessage());          e.printStackTrace();        }   }    }

尖锋网http://www.jfong.cn

2、拨号监听线程

package com.yjf.util;  import java.util.Date; import java.util.TimerTask;  public class AdslThead extends TimerTask{       public static boolean isadsl = false;      @Override  public void run() {         try {           if(isadsl){                 System.out.println("-------拨号线程线程启动-----");               ConnectAdslNet.reconnectAdsl("宽带",Main.adslname,Main.adslpass);               isadsl = false;            }       } catch (Exception e) {             System.out.println(e.getMessage());         }   } } 

3、启动拨号监听程序。  每隔一段时间,循环一次。 这样稳定性,准确性更高。

Timer adsl=new Timer(); adsl.schedule(new AdslThead(),1000,1000*5);//启动拨号检测线程

通过这3步, 就可以较好的控制 多线程抓取过程中的 。 拨号问题了。

效率和稳定性就比较好了。  本人,在开启程序7-30天 , 都能稳定运行。

超过30天,程序运行怎么样。 就只有天知道咯 。 哈哈

本文转自yjflinchong 51CTO博客,原文链接:http://blog.51cto.com/yjflinchong/1164936,如需转载请自行联系原作者

java破解ip屏蔽+多线程同步拨号-【多线程数据采集之五】相关推荐

  1. java 高效的多线程同步_java多线程的同步和异步

    java多线程的同步和异步 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计算 ...

  2. java多线程采集+线程同步-【多线程数据采集之四】

    前些日子讲解了java数据抓取, 今天就讲解最核心的. java多线程数据抓取. java多线程采集+数据同步+线程同步[多线程数据采集之四] 主要讲解多线程抓取,多线程同步,多线程启动,控制等操作. ...

  3. python 线程 的类库_python类库32[多线程同步Lock+RLock+Semaphore+Event]

    多线程基础:python类库32[多线程同步] 一 多线程同步 由于CPython的python解释器在单线程模式下执行,所以导致python的多线程在很多的时候并不能很好地发挥多核cpu的资源.大部 ...

  4. WinAPI多线程同步

    WinAPI多线程同步 WINAPI多线程同步主要有5种方式:全局变量.事件.临界区.互斥量.信号量. 代码是多线程编程的入门代码,为了让自己熟悉基础操作,保留笔记,方便日后查询,下面分别展示各方法示 ...

  5. java提供对多线程同步语言级的支持_赞同科技笔试题11

    java面试题 一.不定项选择题(45分) 1. ()关于运算符>>和>>>描述正确的是 A.>>执行移动 B.>>执行翻转 C. >> ...

  6. (转) Java多线程同步与异步

    Java线程 同步与异步 线程池 1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成 ...

  7. java同步通信方式_java多线程同步与通信示例(synchronized方式)

    java多线程同步示例,来自<疯狂java讲义>.通过synchronized,wait(),notify(),notifyAll()实现多线程同步与通信.假设现在系统中有两个线程,这两个 ...

  8. java 多线程同步_浅谈Java多线程(状态、同步等)

    Java多线程是Java程序员必须掌握的基本的知识点,这块知识点比较复杂,知识点也比较多,今天我们一一来聊下Java多线程,系统的整理下这部分内容. 一.Java中线程创建的三种方式: 1.通过继承T ...

  9. java 什么是线程同步,java多线程同步集合是什么?并发集合是什么?

    java中关于集合的内容也是十分丰富的,而且相关的知识点也是十分多的.多线程集合所涵盖的范围是十分广阔的.今天就来为大家介绍一下,java多线程同步集合是什么以及并发集合是什么?一起来看看吧. 首先我 ...

  10. Java多线程同步机制

    一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在 java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个 ...

最新文章

  1. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
  2. ad20如何画出pcb板大小_NAKANISHI分板机主轴在PCB分板上切削案例
  3. Java向C++发送结构体
  4. macbook所有型号大全_苹果笔记本型号大全
  5. B端SaaS产品工作流程
  6. [Algorithm]一切始于ADT-表达式计算
  7. IOS AppUI规格指南
  8. 【题解】(图论) —— POJ 0714:兔子与星空
  9. 递归处理vue菜单数据
  10. CentOS设置ssh密钥登录
  11. drupal7权限控制之-如何访问未发表的node
  12. react中一个音频或视频播放的时候其他音视频暂停播放
  13. 大麦DW33D路由器假死
  14. 校招----吉比特一面面经
  15. Dex.top社区绿皮书 (试运行)
  16. 万众瞩目之下,ANGULAR 2终于正式发布啦!
  17. uni-app实战之社区交友APP(12)文章和话题API开发
  18. mysql的right函数_MySQL数据库中系统函数right功能简介
  19. 相亲婚恋网站哪个好!交友、约会、找对象都用靠谱的一伴网!
  20. 电视机尺寸一览表2022

热门文章

  1. Hadoop工作流--JobControl(五)
  2. 【python】list,dict赋值不要用等号,要用extend,update
  3. 都是以父元素的width为参照物的
  4. Selenium 新手入门(C#)1. 用vs运行调用Selenium打开页面
  5. SQL server中如何使用return,break和continue
  6. MOSS 2010:Visual Studio 2010开发体验(32)——工作流开发最佳实践(四):可重用工作流...
  7. ubuntu 16.04: 安装NVIDIA驱动,CUDA,CUDNN
  8. 解决Tuxera NTFS for Mac软件安装问题 手动批准mac内核扩展
  9. Linux服务器开机自动启动服务或脚本的方法
  10. CMSSDK功能介绍和关联用户系统