Java Executor框架是Jdk1.5之后推出的,是为了更加方便的开发多线程应用而封装的框架;

  相比传统的Thread类,Java Executor使用方便,性能更好,更易于管理,而且支持线程池,所以我们在开发爬虫的时候,为了提高爬虫的爬取效率,我们要使用多线程,推荐使用Java的Executor框架来实现,因为Executor框架 既简单又高效;

Java Executor框架在爬虫应用中的使用

  常用接口:

  创建固定数目线程的线程池。

  public static ExecutorService newFixedThreadPool(int nThreads)

  

  执行一个线程

  void java.util.concurrent.Executor.execute(Runnable command)

  查看活动线程个数

  int java.util.concurrent.ThreadPoolExecutor.getActiveCount()

  结束所有线程

  void java.util.concurrent.ExecutorService.shutdown()

  说明:Executor在管理多个线程的时候,会进行有效的安排处理,比如创建的时候,线程池是10个,假如实际线程超过10个,Executor会进行有效的队列阻塞和调度。对我们开发者这是透明的,完全不用关心它内部的具体执行;

  测试用例

  

 import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicInteger; /**
* @author zsh
* @site www.qqzsh.top
* @company wlgzs
* @create 2019-06-02 10:57
* @description
*/
public class ExecutorTest { // 执行标识
private static boolean exeFlag=true; public static void main(String[] args) throws InterruptedException {
// 创建ExecutorService 连接池创建固定的10个初始线程
ExecutorService executorService = Executors.newFixedThreadPool(2);
AtomicInteger atomicInteger = new AtomicInteger(); while (exeFlag){
if (atomicInteger.get() <= 100){
executorService.execute(new Runnable() {
@Override
public void run() {
System.out.println("爬取了第"+atomicInteger.get()+"网页...");
atomicInteger.getAndIncrement();
}
});
}else {
if (((ThreadPoolExecutor)executorService).getActiveCount() == 0){
executorService.shutdown();
exeFlag=false;
System.out.println("爬虫任务已经完成");
}
} Thread.sleep((long) 0.1);
}
}
}

Java Executor框架使用的更多相关文章

  1. Java Executor 框架

    Java Executor 框架 Executor框架是指java5中引入的一系列并发库中与executor相关的功能类,包括Executor.Executors. ExecutorService.C ...

  2. Java Executor框架

    java.util.concurrent 包中包含灵活的线程池实现,但是更重要的是,它包含用于管理实现 Runnable 的任务的执行的整个框架,该框架称为 Executor 框架.该框架基于生产者- ...

  3. 使用Java Executor框架实现多线程

    本文将涵盖两个主题: 通过实现Callable接口创建线程 在Java中使用Executor框架 实现Callable接口 为了创建一段可以在线程中运行的代码,我们创建了一个类,然后实现了Callab ...

  4. Java Executor 框架学习总结

    大多数并发都是通过任务执行的方式来实现的.一般有两种方式执行任务:串行和并行. class SingleThreadWebServer { public static void main(String ...

  5. java并发编程(十七)Executor框架和线程池

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17465497   Executor框架简介 在Java 5之后,并发编程引入了一堆新的启动 ...

  6. Java并发和多线程(二)Executor框架

    Executor框架 1.Task?Thread? 很多人在学习多线程这部分知识的时候,容易搞混两个概念:任务(task)和线程(thread). 并发编程可以使我们的程序可以划分为多个分离的.独立运 ...

  7. java并发编程-Executor框架

    Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...

  8. Java并发——线程池Executor框架

    线程池 无限制的创建线程 若采用"为每个任务分配一个线程"的方式会存在一些缺陷,尤其是当需要创建大量线程时: 线程生命周期的开销非常高 资源消耗 稳定性 引入线程池 任务是一组逻辑 ...

  9. JAVA的Executor框架

    Executor框架分离了任务的创建和执行.JAVA SE5的java.util.concurrent包中的执行器(Executor)管理Thread对象,从而简化了并发编程.Executor引入了一 ...

随机推荐

  1. Mac中设置Sublime快速在终端中使用命令打开项目

    工作中用Atom比较多,比较喜欢Atom可以直接在终端中直接输入atom .就能直接打开项目的功能,于是搜索得知sublime text也有这样的功能,下面就简单的配置了一下: sudo ln -s ...

  2. 解决idea tomcat乱码问题

    解决idea Server Output.TomcatLocalhost Log.Tomcat Catalina Log控制台乱码问题 问题原因:编码不一致,tomcat启动后默认编码UTF-8,而w ...

  3. SQL映射器Mapper接口(MyBatis)

    SQL映射器Mapper接口 MyBatis基于代理机制,可以让我们无需再写Dao的实现.直接把以前的dao接口定义成符合规则的Mapper. 注意事项: 1.接口必须以Mapper结尾,名字是Dom ...

  4. [C++] 习题 2.18 倒序查找字串

    目录 前置技能 字符串 KMP 算法 需求描述 概要设计 具体实现 string.cpp strmatching.cpp main.cpp 倒序查找字串: 设计一个算法,在串 str 中查找字串 su ...

  5. SQLSERVER 根据值查询表名

    CREATE PROCEDURE [dbo].[SP_FindValueInDB](@value VARCHAR(1024)) ASBEGIN-- SET NOCOUNT ON added to pr ...

  6. 1byte、1KB、4KB,1MB、1GB用16进制表示的范围。任意地址范围求字节数

    1byte.1KB.4KB,1MB.1GB用16进制表示的范围.任意地址范围求字节数 2018-02-12 18:27:48 望那伊人 阅读数 5032更多 分类专栏: 计算机相关   版权声明:本文 ...

  7. 简单即时通讯、聊天室--java NIO版本

    实现的功能: 运行一个服务端,运行多个客户端.在客户端1,发送消息,其余客户端都能收到客户端1发送的消息. 重点: 1.ByteBuffer在使用时,注意flip()方法的调用,否则读取不到消息. 服 ...

  8. for_each使用方法详解

    for_each使用方法详解[转]   Abstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL)曾經討論過for_each(),不過當時功力尚淺, ...

  9. "多层感知器"--MLP神经网络算法

    提到人工智能(Artificial Intelligence,AI),大家都不会陌生,在现今行业领起风潮,各行各业无不趋之若鹜,作为技术使用者,到底什么是AI,我们要有自己的理解. 目前,在人工智能中 ...

  10. Mac下多版本JDK安装及管理

    在Java项目中,经常对JDK版本有不同的要求,可是不可能为了某个项目的运行重新下载不同版本JDK进行安装,这样就涉及到对本地环境中多个JDK版本的管理. Mac的JDK都是安装到一个指定目录的:/L ...