文档章节

线程池关闭

Zero零_度
 Zero零_度
发布于 2016/01/19 10:40
字数 274
阅读 71
收藏 1

线程池关闭:

package com.audaque.tjfxpt.transfer.main;

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

import org.apache.log4j.Logger;

import com.audaque.tjfxpt.neo4j.enums.EnumNodeType;
import com.audaque.tjfxpt.neo4j.util.Neo4jUtil;
import com.audaque.tjfxpt.transfer.runnable.ApRunnable;
import com.audaque.tjfxpt.transfer.service.ApServiceImpl;
import com.audaque.tjfxpt.transfer.util.PageUtil;

/**
 * 从sdi_t_ap表取得经纬度数据,调用接口,得到经纬度对应的街道、社区,保存街道社区信息
 * @author sniper
 *
 */
public class ApMain {
    
    public static Logger logger = Logger.getLogger(ApMain.class);
    
    public static void main(String[] args) {
        long beginTime = System.currentTimeMillis();
        
        int pageSize = 1000;
        int processors = Runtime.getRuntime().availableProcessors();
//        int poolSize = processors*2;
        int poolSize = 5;
        int threadSize = 5;
        
        if(null != args && args.length > 0) {
            pageSize = Integer.parseInt(args[0]);
            
            if(args.length > 1) {
                poolSize = Integer.parseInt(args[1]);
            }
            
            if(args.length > 2) {
                threadSize = Integer.parseInt(args[2]);
            }
        }
         
        ExecutorService service = Executors.newFixedThreadPool(poolSize);
        
        //人口
        execute("DWR_MDM_PPU_RESIDENT_DIM_INFO", pageSize, EnumNodeType.PERSON, service, threadSize, "resident_Id".toUpperCase());
        
        //法人
        execute("dwr_mdm_legal_person_dim", pageSize, EnumNodeType.LEGALPERSON, service, threadSize, "legal_person_id".toUpperCase());
        
        //房屋
        execute("dwr_mdm_house_info_dim", pageSize, EnumNodeType.HOUSE, service, threadSize, "house_id".toUpperCase());
        
        //楼栋
        execute("dwr_mdm_build_info_dim", pageSize, EnumNodeType.BUILDING, service, threadSize, "building_info_id".toUpperCase());
        
        //事件
        execute("dwr_evt_house_event", pageSize, EnumNodeType.EVENT, service, threadSize, "manage_event_id".toUpperCase());
        
        /*
         * Initiates an orderly shutdown in which previously submitted
         * tasks are executed, but no new tasks will be accepted.
         */
        service.shutdown();
        
        /*
         * if all task still not finish, sleep 5 seconds and check again  
         */
        while(!service.isTerminated()) {
            try {
                service.awaitTermination(5, TimeUnit.SECONDS);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
        Neo4jUtil.shutdown();
        logger.info("execute time:" + (System.currentTimeMillis()-beginTime)/1000 + "(s)");
    }
    
    public static void execute(String tableName, int pageSize, EnumNodeType enumNodeType, ExecutorService service, int threadSize, String idKey) {
        int totalCount = ApServiceImpl.getInstance().queryTotalCount(tableName);
        int totalPage = PageUtil.getInstance(totalCount, 0, pageSize).getTotalPages();
        
        ApRunnable apR = new ApRunnable(totalCount, pageSize, totalPage, tableName, enumNodeType, idKey);
        for(int i=0; i<threadSize; i++) {
            service.execute(apR);
        }
    }
    
}


© 著作权归作者所有

Zero零_度
粉丝 69
博文 1267
码字总数 263854
作品 0
程序员
私信 提问
线程池学习

 新建一个线程并启动,开销会很大,因为运行线程需要的资源比调用对象方法需要的资源多得多。在很多情况下,线程被用于执行一类任务,而这类任务数量很多,发生的时间分布不均,如果为每个新...

wf王帆
2016/07/18
12
0
Java 线程池入门

采用Executors工厂类的静态方法来创建进程池 常用静态方法如下 前三个方法返回一个ExecutorService对象,该对象表示一个线程池,可以执行Runnable或者Callable对象的线程。后一个返回一个Sch...

有苦向瓜诉说
2018/01/15
0
0
帖子太多了,没法一一回复,12306的问题在于并发

我也在学并发,遇到很多问题,其中一个是 如何获知 一个有阻塞队列的10个大小的线程池,执行1000个任务 全部完成 的终结时间,然后在终结时间将线程池正确关闭 现在我没法获知终结时间 比如我...

你是错的我恒对
2014/01/22
802
9
java5线程并发库的应用

一、线程池 1、线程池的概念与Executors类的应用 > 创建固定大小的线程池 > 创建缓存线程池 > 创建单一线程池(如何实现线程死掉后重启?) 2、关闭线程池 > shutdown与shutdownNow的比较 前者...

哎小艾
2018/01/17
5
0
【Java 并发】Executor框架机制与线程池配置使用

一,Executor框架Executor框架便是Java 5中引入的,其内部使用了线程池机制,在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java ...

Java红茶
2017/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
10
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
23
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
9
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部