java线程池工具类代码(利用java官方线程池类ExecutorService实现)

来源:互联网 发布:原油价格数据在哪里查 编辑:程序博客网 时间:2024/06/05 21:04
package common.util;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;/**线程工具类*/public class ThreadUtil {/**长时间线程池的最大线程数量*/private static final int MAX_THREAD = 2;/**长时间线程的超时时间,如果线程执行时间超过这个时间会自动释放*/private static final int LONG_TIMEOUT_TIME = 60000;/**短时间线程的超时时间,如果线程执行时间超过这个时间会自动释放*/private static final int SORT_TIMEOUT_TIME = 12000;/**长时间线程池,用于执行短时间较长的线程,需要设置最大线程数量*/private static ExecutorService longTimeThreadPool = Executors.newFixedThreadPool(MAX_THREAD);/**短时间线程池,用于存放执行时间较短的线程,无需设置线程的最大数量*/private static ExecutorService sortTimeThreadPool = Executors.newCachedThreadPool();/** * 创建一个线程,将线程放到短时间线程池中,并且启动一个守护线程监控线程超时 *  *  * @param runnable:需要运行的线程 *  * @throws Exception * */public static synchronized void getSortTimeOutThread(Runnable runnable){//将线程提交到短时间线程池中,然后会得到一个FutureFuture<String> future = (Future<String>) sortTimeThreadPool.submit(runnable);//启动一个守护线程,这个线程将计算超时new ThreadUtil().monitorThreadTime(SORT_TIMEOUT_TIME,future);}/** * 创建一个线程,将线程放到长时间线程池中,并且启动一个守护线程监控线程超时 *  *  * @param runnable:需要运行的线程 *  * @throws Exception * */public static synchronized void getLongTimeOutThread(Runnable runnable) throws Exception{//将线程提交到短时间线程池中,然后会得到一个FutureFuture<String> future = (Future<String>) longTimeThreadPool.submit(runnable);//启动一个守护线程,这个线程将计算超时new ThreadUtil().monitorThreadTime(LONG_TIMEOUT_TIME,future);}/** * 创建一个线程,将线程放到长时间线程池中,并且启动一个守护线程监控线程超时 *  *  * @param runnable:需要运行的线程 * @param timeOutTime:自定义的超时时间 *  * @throws Exception * */public static synchronized void getLongTimeOutThread(Runnable runnable,int timeOutTime) throws Exception{//将线程提交到短时间线程池中,然后会得到一个FutureFuture<String> future = (Future<String>) longTimeThreadPool.submit(runnable);//启动一个守护线程,这个线程将计算超时new ThreadUtil().monitorThreadTime(timeOutTime,future);}/** * 监控线程超时守护线程,到超时时间去查看一下线程状态,如果正在执行中则停止线程(这段有问题) *  * @param timeOutTime:超时时间 * @param future:执行结果表单,将用来计算超时 *  *  * */private void monitorThreadTime(int timeOutTime,Future<String> future){//执行守护线程new Thread(new Runnable() {@Overridepublic void run() {//等待一段时间,然后调用执行结果,如果没有执行完,则试着去结束try {Thread.sleep(timeOutTime);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//判断future是否执行完成,如果超时未完成,则试着结束线程if(!future.isDone()){//false表示不允许线程执行时中断,true表示允许future.cancel(true);}}}).start();}}

守护线程监控超时的代码有问题,后面我找到问题了会更新,现在最好屏蔽掉
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机屏幕被摔了怎么办 xp调分辨率黑屏怎么办 公司logo被盗用怎么办 商标注册证掉了怎么办 商标注册证书丢了怎么办 市场监督管理局罚款怎么办 东莞居住证掉了怎么办 工商注销了税务怎么办 楼道自来水爆了怎么办 工商证没年检怎么办 工行信用卡被锁怎么办 外地卡密码锁了怎么办 营业执照年审过期了怎么办 工商营业执照吊销了怎么办 小规模企业工商年检怎么办 血流变检查偏高怎么办 信誉卡没有邮箱怎么办 税务年报没报怎么办 工商忘记年审了怎么办 营业执照脱审了怎么办 公司年审没有弄怎么办 车检标志丢了怎么办 机动车年检丢了怎么办 汽车保险标志丢了怎么办 车辆年检贴丢失怎么办 车检标贴丢了怎么办 检验标贴丢了怎么办 小车换年检标志怎么办 职称证忘记审验怎么办 联合年报没报怎么办 职称年审过期了怎么办 嘉兴驾模预约怎么办 电大考试去不了怎么办 负债高怎么办房贷 宁波鄞州银行卡怎么办 硕士学位实验数据不好怎么办 小区外过车很吵怎么办 建筑物初级消防证书怎么办 毕业答辩去不了怎么办 卡波西水痘样疹怎么办 58企业认证失败怎么办