All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wowtools.common.utils.AsyncTaskUtil Maven / Gradle / Ivy

There is a newer version: 1.4.2
Show newest version
package org.wowtools.common.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * 异步任务执行工具类
 *
 * @author liuyu
 * @date 2016年7月4日
 */
public class AsyncTaskUtil {
    private static final ExecutorService pool = Executors.newCachedThreadPool();

    /**
     * 执行一个异步任务
     *
     * @param task
     */
    public static void execute(Runnable task) {
        pool.execute(task);
    }

    /**
     * 批量执行任务,并收集任务返回的数据,待所有任务执行完后一并返回
     *
     * @param tasks
     * @return
     */
    public static  List executeAsynTasksAndReturn(List> tasks) {
        ArrayList> fs = new ArrayList<>();
        for (Callable task : tasks) {
            Future f = pool.submit(task);
            fs.add(f);
        }
        ArrayList res = new ArrayList<>();
        try {
            for (Future f : fs) {
                T r = f.get();
                res.add(r);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return res;
    }

    /**
     * 批量执行任务
     *
     * @param tasks
     * @param wait  是否等待所有任务执行完毕
     */
    public static void executeAsynTasks(List tasks, boolean wait) {
        if (!wait) {
            for (Runnable task : tasks) {
                pool.execute(task);
            }
            return;
        }
        ArrayList> fs = new ArrayList<>();
        for (Runnable task : tasks) {
            Future f = pool.submit(task);
            fs.add(f);
        }
        try {
            for (Future f : fs) {
                f.get();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取线程池
     *
     * @return
     */
    public static ExecutorService getThreadPool() {
        return pool;
    }


    @Override
    protected void finalize() throws Throwable {
        while (true) {
            try {
                pool.shutdown();
            } catch (Exception e) {
                Thread.sleep(1000);
            }
            break;
        }
        super.finalize();
    }

    public static void shutdown() {
        pool.shutdown();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy