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. 使用AOP进行权限验证

    首先我们定义一个切入点(匹配com.ed.controller.Seller开头的controller的所有public方法) @Pointcut("execution(public * c ...

  2. Linux02 cd命令以及绝对路径和相对路径

    一.cd 这是一个非常基本,也是大家常用的命令,用于切换当前目录,他的参数就是要切换的目录的路径,可以是绝对路径,也可以是相对路径. cd /home/keshengtao/ 绝对路径 cd ./pa ...

  3. CSS样式三种形式

    CSS基本表现形式只有三种:标签样式.Class类样式.ID样式 标签样式: 必须与HTML标签同名.仅仅影响同名标签 Class样式:可以在任何标签中使用: class="样式名" ...

  4. # RESTful登录(基于token鉴权)的设计实例

    使用场景 现在很多基于restful的api接口都有个登录的设计,也就是在发起正式的请求之前先通过一个登录的请求接口,申请一个叫做token的东西.申请成功后,后面其他的支付请求都要带上这个token ...

  5. JAVA实现种子填充算法

    种子填充算法原理在网上很多地方都能找到,这篇是继上篇扫描线算法后另一种填充算法,直接上实现代码啦0.0 我的实现只是实现了种子填充算法,但是运行效率不快,如果大佬有改进方法,欢迎和我交流,谢谢! 最后 ...

  6. CentOS+Linux部署.NET Core应用程序

    工具: WinSCP+Xshell+VMware 1.安装CentOS 省略安装过程... 2. 安装.Net Core Sdk ①更新可用的安装包:sudo yum update ②安装.NET需要 ...

  7. Markdown笔记(git提交带有emoji的commit描述)

    用法:> git commit -m ' :tada: initial ' emoji来源:> ![gitmoji](https://gitmoji.carloscuesta.me/sta ...

  8. vue实现一个评论列表

    <!DOCTYPE html> <html> <head> <title>简易评论列表</title> <meta charset=& ...

  9. Fatal error:Call to undefined function mysqli_connect() in .php line 报错

    这样的问题,多半是PHP配置问题. 修改php配置文件 1.在php(版本:php-7.2.7-Win32-VC15-x64)文件夹中一开始不会看到php.ini,而是php.ini-developm ...

  10. 【vue开发】超简单的防止连续点击js指令方法

    vue防重复点击(指令实现) 快速点击按钮会重复多次调用接口,防止出现这样的情况 全局定义,方便调用 新建plugins.js export default { install (Vue) { // ...