zoukankan      html  css  js  c++  java
  • Java线程池的简单使用

    最近由于公司的业务需求,需要使用线程池来进行对数据进行处理,所以就简单的学习了一下线程池的东西,刚接触感觉挺难的,不过使用了就不感觉那么难了,还是蛮简单的,

    package com.yd.sms.job;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.PropertyResourceBundle;
    import java.util.ResourceBundle;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    import org.apache.axis.components.threadpool.ThreadPool;
    import org.hibernate.mapping.Array;
    
    import com.yd.sms.api.local.SmsRunLocal;
    import com.yd.sms.bean.entity.ActStatList;
    import com.yd.sms.bean.local.ActStatListFacadeLocal;
    import com.yd.sms.common.EJBHomeFactory;
    
    /**
     *
     * @author allen.tang
     *
     */
    public class SmsCleanJob {
        
        private final static  ExecutorService threadPool;  //线程池
        
        private static int maxThread;   //需要启动的最大线程数
        
        private static int maxSingletonThread;  //单个线程执行的任务数量
        
        static{
            ResourceBundle bundle = PropertyResourceBundle.getBundle("config");  //获取配置文件信息
            String maxThread_str = bundle.getString("threadPool_maxThread");
            String maxSingletonThread_str = bundle.getString("threadPool_maxSingletonThread");
            maxThread = Integer.valueOf(maxThread_str);
            maxSingletonThread = Integer.valueOf(maxSingletonThread_str);
            threadPool = Executors.newFixedThreadPool(maxThread);
        }
        
        /**
         * 执行
         */
        public void execute(){
            long startTime = System.currentTimeMillis();
            String[] names = new String[]{"a", "b", "c", "d", "e"};
            
            System.out.println("********开始进入线程池");
            for(int i = 0; i < names.length; i ++){
                    threadPool.submit(new SmsCleanThread(names[i]));
            }
            long endTime = System.currentTimeMillis(); //由于公司的业务要求每个几秒就会有一批数据进来,所以这里在后面没有关闭线程池
            System.out.println("********已经退出线程池:总共耗时:"+((endTime - startTime)/ 1000.0)+"秒");
            System.out.println("========线程池已经执行结束!");
        }
        
        
    
        /**
         * 线程
         * @author allen.tang
         *
         */
        class SmsCleanThread implements Runnable{
    
        private String str;
            
            public SmsCleanThread(String  str){
                this.str = str;
            }
    
            public void run() {
                    System.out.print(str+"执行中。。。");
                
                }
                
            }
            
        }
        
        
    
    }

    我这里所使用的是已经被封装好的线程池,所以挺简单的,不过这个也是用的最多的一个,在一开始的时候启动确定数量的线程,方便调用。

  • 相关阅读:
    Oracle 即时客户点下载以及简单连接数据库的方法
    公司网络限制的一个变通解决方法
    Java 虚拟机的运行模式
    DELPHI MAKEWORD的用法
    delphi absolute 应用实例
    从此不求人:自主研发一套PHP前端开发框架
    windows 手动安装 PostgreSQL 9.0 zip解压缩版
    使用免安装版本在windows上手动安装PostgreSQL
    吐血整理 Delphi系列书籍 118本(全)
    Delphi中Frame的使用方法(2)
  • 原文地址:https://www.cnblogs.com/tangkai/p/3758988.html
Copyright © 2011-2022 走看看