以下是一个简单的多线程爬虫实现
来源:互联网 发布:形容傻天真网络词 编辑:程序博客网 时间:2024/04/29 17:40
//以下是一个简单的多线程爬虫实现
package thread;
import java.util.concurrent.Callable;
public class MThread extends Thread{
threadList = new ArrayList<Thread>(THREAD_NUM);
for(int i = 0; i < THREAD_NUM; i++){
Thread t = new Thread(this, "Spider Thread #" + (i + 1));
t.start();
threadList.add(t);
}
//当前线程等待子线程退出
while(threadList.size() > 0){
Thread child = (Thread) threadList.remove(0);
child.join();
}
//子程序主要的执行程序如下:
public synchronized NewSource dequeueURL() throws Exception{
while(true){
if(!todo.isEmpty()){
NewsSource newitem = (NewsSource)todo.removeFirst();
visited.add(newitem.URL, newitem.source);
return newiyem;
}
else
{
//等待线程数的计数器减一
threads--;
//如果仍然有其他的线程在活动则等待
if(threads > 0){
wait();
threads++;
}
else{
notifyAll();
return null;
}
}
}
}
//enqueueURL把发现的URL放入TODO表
public synchronizesed void enqueueURL(NewSource newitem){
if(!visited.contains(newitem.URL)){
todo.add(newitem);
visited.add(newitem.URL, newitem.source);
//唤醒在等待的线程
}
}
public void run(){
NewsSource item;
try{
while((item == dequeueURL()) !=null){
//包含把新的URL放入TODO表的过程
indexURL(item);
}
}
catch(Exception e){
e.printStackTrace();
}
threads--;
}
}
package thread;
import java.util.concurrent.Callable;
public class MThread extends Thread{
threadList = new ArrayList<Thread>(THREAD_NUM);
for(int i = 0; i < THREAD_NUM; i++){
Thread t = new Thread(this, "Spider Thread #" + (i + 1));
t.start();
threadList.add(t);
}
//当前线程等待子线程退出
while(threadList.size() > 0){
Thread child = (Thread) threadList.remove(0);
child.join();
}
//子程序主要的执行程序如下:
public synchronized NewSource dequeueURL() throws Exception{
while(true){
if(!todo.isEmpty()){
NewsSource newitem = (NewsSource)todo.removeFirst();
visited.add(newitem.URL, newitem.source);
return newiyem;
}
else
{
//等待线程数的计数器减一
threads--;
//如果仍然有其他的线程在活动则等待
if(threads > 0){
wait();
threads++;
}
else{
notifyAll();
return null;
}
}
}
}
//enqueueURL把发现的URL放入TODO表
public synchronizesed void enqueueURL(NewSource newitem){
if(!visited.contains(newitem.URL)){
todo.add(newitem);
visited.add(newitem.URL, newitem.source);
//唤醒在等待的线程
}
}
public void run(){
NewsSource item;
try{
while((item == dequeueURL()) !=null){
//包含把新的URL放入TODO表的过程
indexURL(item);
}
}
catch(Exception e){
e.printStackTrace();
}
threads--;
}
}
0 0
- 以下是一个简单的多线程爬虫实现
- 一个简单多线程爬虫的实现
- 一个简单的爬虫的实现
- PHP实现的一个简单的爬虫
- 一个简单的爬虫技术实现
- python实现一个简单的爬虫
- python一个简单爬虫的实现
- 一个PHP实现的轻量级简单爬虫
- 学习:C#实现一个简单的爬虫
- 一个PHP实现的轻量级简单爬虫
- 用Python3实现一个简单的爬虫。
- Python实现一个简单的图片爬虫
- 一个简单的爬虫
- 一个简单的爬虫
- 一个简单的爬虫
- 以下是添加一个时钟的代码
- 一个比较简单的 newFixedThreadPool多线程实现
- 一个爬虫的实现
- tomcat下jsp乱码原因(下)
- MyThread线程基本训练
- Machine Learning机器学习课堂笔记4(代价函数)
- DownLoadCall
- poj2676 Sudoku
- 以下是一个简单的多线程爬虫实现
- cisco 交换机设置时区、时间、同步日志本地时间等操作
- 论文阅读_基于CNN的图像二值化_Robust Binarization for Video Text Recognition
- Visual Basic 中判断指定名称的进程是否存在
- 中医文化的管理学启示
- ubuntu 下svn客户端使用
- Visual Basic 判断一个被Shell的程序进程是否结束
- 如何区分Oracle的数据库,实例,服务名,SID
- Swift中利用NSURLConnection进行同步异步下载(实例解析)