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

}

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

原文地址:https://www.cnblogs.com/tangkai/p/3758988.html