文档章节

多线程EXecutor 柜架示例

诺岚
 诺岚
发布于 2017/08/29 15:50
字数 846
阅读 10
收藏 0

 

代码:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

public class ExecutorTest {
    //网页数
    private static Integer pages=1;
    //执行标识
    private static boolean exeFlag=true;

    public static void main(String[] args) {
        //创建ExcutorService 连接池默认连接10个
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        while (exeFlag){
            if (pages<=100){
                executorService.execute(new Runnable() {
                    public void run() {
                        System.out.println("爬取了第"+pages+"网页....");
                        pages++;
                    }
                });
            }else {
                if(((ThreadPoolExecutor)executorService).getActiveCount()==0){ // 活动线程个数是0
                    executorService.shutdown(); // 结束所有线程
                    exeFlag=false;
                    System.out.println("爬虫任务已经完成");
                }
            }
            try {
                Thread.sleep(100); // 线程休息0.1秒
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

运行结果:

 ExecutorTest
爬取了第1网页....
爬取了第2网页....
爬取了第3网页....
爬取了第4网页....
爬取了第5网页....
爬取了第6网页....
爬取了第7网页....
爬取了第8网页....
爬取了第9网页....
爬取了第10网页....
爬取了第11网页....
爬取了第12网页....
爬取了第13网页....
爬取了第14网页....
爬取了第15网页....
爬取了第16网页....
爬取了第17网页....
爬取了第18网页....
爬取了第19网页....
爬取了第20网页....
爬取了第21网页....
爬取了第22网页....
爬取了第23网页....
爬取了第24网页....
爬取了第25网页....
爬取了第26网页....
爬取了第27网页....
爬取了第28网页....
爬取了第29网页....
爬取了第30网页....
爬取了第31网页....
爬取了第32网页....
爬取了第33网页....
爬取了第34网页....
爬取了第35网页....
爬取了第36网页....
爬取了第37网页....
爬取了第38网页....
爬取了第39网页....
爬取了第40网页....
爬取了第41网页....
爬取了第42网页....
爬取了第43网页....
爬取了第44网页....
爬取了第45网页....
爬取了第46网页....
爬取了第47网页....
爬取了第48网页....
爬取了第49网页....
爬取了第50网页....
爬取了第51网页....
爬取了第52网页....
爬取了第53网页....
爬取了第54网页....
爬取了第55网页....
爬取了第56网页....
爬取了第57网页....
爬取了第58网页....
爬取了第59网页....
爬取了第60网页....
爬取了第61网页....
爬取了第62网页....
爬取了第63网页....
爬取了第64网页....
爬取了第65网页....
爬取了第66网页....
爬取了第67网页....
爬取了第68网页....
爬取了第69网页....
爬取了第70网页....
爬取了第71网页....
爬取了第72网页....
爬取了第73网页....
爬取了第74网页....
爬取了第75网页....
爬取了第76网页....
爬取了第77网页....
爬取了第78网页....
爬取了第79网页....
爬取了第80网页....
爬取了第81网页....
爬取了第82网页....
爬取了第83网页....
爬取了第84网页....
爬取了第85网页....
爬取了第86网页....
爬取了第87网页....
爬取了第88网页....
爬取了第89网页....
爬取了第90网页....
爬取了第91网页....
爬取了第92网页....
爬取了第93网页....
爬取了第94网页....
爬取了第95网页....
爬取了第96网页....
爬取了第97网页....
爬取了第98网页....
爬取了第99网页....
爬取了第100网页....
爬虫任务已经完成

Process finished with exit code 0

 

© 著作权归作者所有

共有 人打赏支持
诺岚
粉丝 0
博文 103
码字总数 178262
作品 0
广州
程序员
私信 提问
iframe去边框,无边框,使用大全

<iframe src=”you page’s url” width=”100″ height=”30″ frameborder=”no” border=”0″ marginwidth=”0″ marginheight=”0″ scrolling=”no” allowtransparency=”yes”></if......

liaolzy2
2014/09/24
0
0
Active Object 并发模式在 Java 中的应用

本文主要从以下两个方面进行阐述: 使用 C++ 语言,来描述 Active Object 设计模式。 Java 类库对于这样一个典型的模式做了很好的类库层面的封装,因此对于 Java 的开发者来说,很多关于该设计...

红薯
2010/08/08
230
0
Rust 异步编程框架 - Tokio

Tokio 是 Rust 中的异步编程框架,它将复杂的异步编程抽象为 Futures、Tasks 和 Executor,并提供了 Timer 等基础设施。Tokio 快速、可靠,且可扩展。 Tokio 是一个事件驱动的非阻塞 I/O 平台...

匿名
07/18
0
4
Java多线程之线程池(ThreadPoolExecutor)实现原理分析(一)

在上一篇文章Java中实现多线程的3种方法介绍和比较中,我们讲解了Java中实现多线程的3种方法。使用多线程,就必须要考虑使用线程池,今天我们来聊聊线程池的那些事。 注:源码都是基于JDK1....

小怪聊职场
05/14
0
0
Spring中@Configuration@EnableAsync@Async用法总结

引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在...

squanchao
2016/12/21
66
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(三)之NioEventLoop的线程(或者reactor线程)启动(一)

在第一章中,我们看关于NioEventLoopGroup的初始化,我们知道了NioEventLoopGroup对象中有一组EventLoop数组,并且数组中的每个EventLoop对象都对应一个线程FastThreadLocalThread,那么这个...

天空小小
今天
2
0
PHP动态扩展Redis模块

查看已有模块 [root@test-a ~]# /usr/local/php/bin/php -m[PHP Modules]bz2Core...zlib[Zend Modules] 下载包,解压,生成configure文件 [root@test-a ~]# cd /usr/local/src/[ro......

野雪球
今天
2
0
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
今天
3
0
Mybatis应用学习——简单使用示例

1. 传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: public class JDBCDemo {public static void main(String[] args) {Connection con=null;PreparedStatement statemen...

江左煤郎
今天
4
0
使用JavaScript编写iOS应用业务逻辑

JSAUIKitCocoa使你可以使用JavaScript编写对性能要求不高但可能变动性很大的iOS应用的业务逻辑部分,View组件、需要多线程支持的Model等则直接使用原生对象。 编写方式与React Native相似,但...

neal01
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部