java多线程采集+线程同步-【多线程数据采集之四】
前些日子讲解了java数据抓取, 今天就讲解最核心的。 java多线程数据抓取。
java多线程采集+数据同步+线程同步【多线程数据采集之四】
主要讲解多线程抓取,多线程同步,多线程启动,控制等操作。
文章栏目列表:http://blog.csdn.net/column/details/threadgrab.html
先讲解第一步,线程类。 核心数据抓取线程。
这个例子主要讲解的是 对设定的天数的数据抓取。 从当前日期往后推。
每个线程负责一天的数据任务抓取。
七七八八网http://www.qi788.com
源代码如下:
1、线程类
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.io.BufferedInputStream; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.Timer; public class Main { private static boolean isRunGrabThread = true; //抓取线程是否执行完毕 public static int threadCount = 3; //线程数量 public static int daycount = 30; //查询总天数 public static int thisdaycount = 0; public static int isadsl = 0; public static int adslcount = 1; public static void main(String[] args) { try { startThead();//启动抓取数据主线程 } catch (Exception e) { e.printStackTrace(); } } public static void startThead(){ Thread[] grabThreads= new Thread[threadCount]; try{ //开启-数据抓取子线程 for(int i=0;i<grabThreads.length;i++){ Thread searchThread=new GetWebThread(); grabThreads[i] = searchThread; grabThreads[i].setDaemon(true); grabThreads[i].start(); } isRunGrabThread = true; //监控子线程,全部完成程序退出 WhileLoop: while(true){ //拨号策略控制 //reconnectControl(); //判断子线程是否运行完成 for(int i=0;i<threadCount;i++){ if(grabThreads[i].isAlive()){ Thread.sleep(3*1000); continue WhileLoop; } } //所有抓取线程执行完毕 isRunGrabThread = false; //子线程执行完毕则退出 break; } } catch (Exception e) { System.out.println("main主线程--系统异常!"); } } }
【多线程数据采集之四】java多线程采集+数据同步+线程同步
本文转自yjflinchong 51CTO博客,原文链接:http://blog.51cto.com/yjflinchong/1164937,如需转载请自行联系原作者
java多线程采集+线程同步-【多线程数据采集之四】相关推荐
- Java多线程之线程同步机制(锁,线程池等等)
Java多线程之线程同步机制 一.概念 1.并发 2.起因 3.缺点 二.三大不安全案例 1.样例一(模拟买票场景) 2.样例二(模拟取钱场景) 3.样例三(模拟集合) 三.同步方法及同步块 1.同步 ...
- java多线程之线程同步问题
1.线程不安全的问题分析 当多线程并发访问同一个资源对象的时候,可能出现线程不安全的问题.但是,我们分析打印的结果,发现没有问题: 为了让问题更明显: Thread.sleep(10);//当 ...
- 3、Linux多线程,线程同步(转)
3.Linux多线程,线程同步 5)线程私有数据 进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有.但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread-spec ...
- C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent
C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent 本章概要: 1:终止状态和非终止状态 2:AutoResetEvent和ManualResetE ...
- VC++ MFC 多线程及线程同步(详细、全面总结!)
更多详情:http://blog.csdn.net/whyacinth/ VC++ MFC 多线程及线程同步 关键词: MFC 多线程及线程同步 ...
- Java多线程(线程同步)
多线程编程很容易出现"错误情况",这是由系统的线程调度具有一定的随机性造成的,不过即使程序偶然出现问题,那也是由于编程不当引起.使用多个线程访问同一个数据时很容易出现此类状况,因此 ...
- 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池
并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...
- Java多线程编程——线程同步与线程安全问题及synchronized关键字
在多线程环境下,我们常常需要让多个线程同时去操作同一资源.在某些情况下,这种情形会导致程序的运行结果出现差错.专业上的,当多个线程在执行同一段代码的时候,每次的执行结果和单线程执行的结果都是一样的,不 ...
- java多线程:线程同步synchronized(不同步的问题、队列与锁),死锁的产生和解决
0.不同步的问题 并发的线程不安全问题: 多个线程同时操作同一个对象,如果控制不好,就会产生问题,叫做线程不安全. 我们来看三个比较经典的案例来说明线程不安全的问题. 0.1 订票问题 例如前面说过的 ...
最新文章
- 【原创】Kakfa metrics包源代码分析
- 程序员委托事件学习随笔
- 机器学习如何选择模型 机器学习与数据挖掘区别 深度学习科普
- 学习笔记之-php编码技巧
- Scala模式匹配:类型匹配
- java调用第三方dll文件 源码_C++调用python文件(包含第三方库)
- 【CASS精品教程】CASS 9.2 for AutoCAD2014启动提示文件加载,怎么处理?
- python输入三行数据_3行Python代码就能获取海量数据?
- 动态创建php 类函数或函数
- 最新摸头GIF在线生成工具源码+实测可用
- 计算机的3d软件家庭版,3DOne家庭版 64位
- 山西台达plc可编程控制器_可编程控制器16(PLC)数据移位指令
- spring 解决循环依赖
- Userland中debian系统打开chromium
- 推荐系统学习之评测指标
- 快递到付被拒收怎么办?双方都拒收货物会怎么处理?
- 考研英语 刘晓艳小作文模板
- 洛谷 T284709 怨念(resent)
- Android手机输入法按键监听-dispatchKeyEvent
- 在phpstudy的环境下,如何配置php虚拟主机。