java破解ip屏蔽+多线程同步
来源:互联网 发布:业余开淘宝店能赚钱吗 编辑:程序博客网 时间:2024/06/06 01:47
java破解ip屏蔽+多线程同步
多线程数据采集系列 整个过程就是: 抓取,分析,破解屏蔽,多线程, 多线程数据同步以及拨号同步。
上面几回,讲到了。 单线程 破解ip屏蔽。 比较容易。 只要拨号就行了。
多线程抓取数据也比较容易, 但是引入多线程之后。 拨号就容易出现问题。
多线程抓取的时候,这个拨号就比较麻烦一点。 因为,多线程拨号,
会出现: 第一个线程拨号的时候,第二个线程也同时进入拨号,第三个 4个 同样会进入。 这样会导致线程一直在拨号。 导致无限循环。
怎么控制这个拨号同步,达到较高的效率呢。
本人是新手, 采用了比较简单的方法。
就是,第一个开始拨号, 就告诉后面的,我已经在拨号了。
你们反正抓取不了数据,那就先等一等,等我第一个拨号完毕,大家所有线程在进行下一轮的循环抓取数据。
多线程数据采集系列
转载文章,请注明出处。http://blog.csdn.net/yjflinchong
源码如下:
1、线程类
其中:
[java] view plaincopy
01.AdslThead.isadsl = true; 就是用来设置,告诉后面的线程,已经有人在拨号了。
[java] view plaincopy
01.package com.yjf.util;
02.import java.util.Date;
03.import java.util.List;
04.
05.
06.public class GetWebThread extends Thread{
07.
08. /**
09. * 线程
10. */
11. public void run(){
12. try {
13. while (true) {
14. int day = 0;
15. long time1 = new Date().getTime();
16. //用来同步抓取线程
17. synchronized("searchthead"){
18. Main.thisdaycount++;
19. if(Main.thisdaycount>Main.daycount){
20. break;
21. }
22. System.out.println("开始查询第"+(Main.thisdaycount)+"天");
23. Thread.sleep(133);
24. day = Main.thisdaycount-1;
25. }
26. //获取抓取的时间
27. String datetext = TimeUtil.date.format(TimeUtil.addDaysForDate(day));
28. String[] txt =FileUtil.getCityByTxtFile();
29. for(int t=0;t<txt.length;t++){
30.
31. String[] way = txt[t].split("\\|");
32. String start = way[0];
33. String end = way[1];
34. //抓取到的数据列表
35. List<DataBean> datalist = Main.getDataList(datetext, start, end);
36. if(datalist!=null){
37. Main.isadsl = 0;
38. CheckAdsl.adsllasttime = new Date().getTime();
39. FileUtil.addDataToFileCsv(datalist);
40. Main.log.printLog("===="+datetext+"="+start+"="+end+"="+t+"=数据总数:"+datalist.size());
41. }else{
42. Thread.sleep(11);
43. AdslThead.isadsl = true;
44. Thread.sleep(11);
45. //判断是否正在拨号 并暂停线程
46. while (AdslThead.isadsl) {
47. Thread.sleep(5000);
48. }
49. t--;
50. }
51. }
52. long time2 = new Date().getTime();
53. Main.log.printLog(datetext+"==查询完毕=========耗时"+(time2-time1));
54. }
55. } catch (Exception e) {
56. Main.log.printLog(e.getMessage());
57. e.printStackTrace();
58. }
59. }
60.
61.}
2、拨号监听线程
[java] view plaincopy
01.package com.yjf.util;
02.
03.import java.util.Date;
04.import java.util.TimerTask;
05.
06.public class AdslThead extends TimerTask{
07.
08. public static boolean isadsl = false;
09.
10. @Override
11. public void run() {
12. try {
13. if(isadsl){
14. System.out.println("-------拨号线程线程启动-----");
15. ConnectAdslNet.reconnectAdsl("宽带",Main.adslname,Main.adslpass);
16. isadsl = false;
17. }
18. } catch (Exception e) {
19. System.out.println(e.getMessage());
20. }
21. }
22.}
3、启动拨号监听程序。 每隔一段时间,循环一次。 这样稳定性,准确性更高。
[java] view plaincopy
01.Timer adsl=new Timer();
02.adsl.schedule(new AdslThead(),1000,1000*5);//启动拨号检测线程
通过这3步, 就可以较好的控制 多线程抓取过程中的 。 拨号问题了。
效率和稳定性就比较好了。 本人,在开启程序7-30天 , 都能稳定运行。
超过30天,程序运行怎么样。 就只有天知道咯 。 哈哈
- java破解ip屏蔽+多线程同步
- java破解ip屏蔽+多线程同步
- java破解ip屏蔽+多线程同步
- java破解ip屏蔽+多线程同步拨号-【多线程数据采集之五】
- 【多线程数据采集之三】java抓取数据+破解屏蔽ip访问 .
- java抓取数据+破解屏蔽ip访问【多线程数据采集之三】
- java抓取数据+破解屏蔽ip访问【多线程数据采集之三】
- java抓取数据+破解屏蔽ip访问【多…
- JAVA多线程同步小议
- java多线程同步机制
- 控制java多线程同步
- Java多线程(数据同步)
- java多线程同步
- java多线程同步
- Java 多线程同步
- Java多线程同步
- java Synchronized 多线程同步
- java多线程数据同步
- PropertyUtils.describe(this);
- Hadoop字符转码的实现
- google svn
- sqlserver: 范围分组查询(group by, case)
- Oracle基础知识-SQL简单命令
- java破解ip屏蔽+多线程同步
- 【svn】教程
- 手机用户体验测试点
- vim配置文件
- QT常见错误二
- MFC编辑框换行实现
- php数据库操作类
- 真正优秀的程序员有哪些与众不同之处?
- 关于proguard使用总结