• 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+"执行中。。。");
                
                }
                
            }
            
        }
        
        
    
    }

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

  • 相关阅读:
    汇编学习笔记(25)
    在QT C++中调用 Python并将软件打包发布(裸机可运行)
    集合类
    解决python matplotlib 中文字体的显示乱码-Windows系统;RuntimeWarning: Glyph
    元数据库设计
    解决方案sln工程csproj
    托管代码和非托管代码的区别
    IIS安装和使用URL重写工具-URL Rewrite
    SSL证书及使用
    rpc和rpcwithcert两个虚拟目录
  • 原文地址:https://www.cnblogs.com/tangkai/p/3758988.html
Copyright © 2020-2023  润新知