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

com.base4j.util.ThreadUtil Maven / Gradle / Ivy

The newest version!
package com.base4j.util;

import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import com.base4j.util.exceptions.UtilException;

/**
 * 线程池工具
 *
 * @author luxiaolei
 */
public class ThreadUtil {
    private static ExecutorService executor = Executors.newCachedThreadPool();

    /**
     * 直接在公共线程池中执行线程
     *
     * @param runnable 可运行对象
     */
    public static void execute(Runnable runnable) {
        try {
            executor.execute(runnable);
        } catch (Exception e) {
            throw new UtilException("Exception when running task!", e);
        }
    }

    /**
     * 重启公共线程池
     */
    public static void restart() {
        executor.shutdownNow();
        executor = Executors.newCachedThreadPool();
    }

    /**
     * 新建一个线程池
     *
     * @param threadSize 同时执行的线程数大小
     * @return ExecutorService
     */
    public static ExecutorService newExecutor(int threadSize) {
        return Executors.newFixedThreadPool(threadSize);
    }

    /**
     * 获得一个新的线程池
     *
     * @return ExecutorService
     */
    public static ExecutorService newExecutor() {
        return Executors.newCachedThreadPool();
    }

    /**
     * 获得一个新的线程池,只有单个线程
     *
     * @return ExecutorService
     */
    public static ExecutorService newSingleExecutor() {
        return Executors.newSingleThreadExecutor();
    }

    /**
     * 执行异步方法
     *
     * @param runnable 需要执行的方法体
     * @return 执行的方法体
     */
    public static Runnable excAsync(final Runnable runnable, boolean isDeamon) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                runnable.run();
            }
        };
        thread.setDaemon(isDeamon);
        thread.start();

        return runnable;
    }

    /**
     * 执行有返回值的异步方法
* Future代表一个异步执行的操作,通过get()方法可以获得操作的结果,如果异步操作还没有完成,则,get()会使当前线程阻塞 * * @return Future */ public static Future execAsync(Callable task) { return executor.submit(task); } /** * 新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果。,若未完成,则会阻塞 * * @return CompletionService */ public static CompletionService newCompletionService() { return new ExecutorCompletionService(executor); } /** * 新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果。,若未完成,则会阻塞 * * @return CompletionService */ public static CompletionService newCompletionService(ExecutorService executor) { return new ExecutorCompletionService(executor); } /** * 新建一个CountDownLatch * * @param threadCount 线程数量 * @return CountDownLatch */ public static CountDownLatch newCountDownLatch(int threadCount) { return new CountDownLatch(threadCount); } /** * 挂起当前线程 * * @param millis 挂起的毫秒数 * @return 被中断返回false,否则true */ public static boolean sleep(Long millis) { if (millis == null || millis <= 0) { return true; } try { Thread.sleep(millis); } catch (InterruptedException e) { return false; } return true; } /** * @return 获得堆栈列表 */ public static StackTraceElement[] getStackTrace() { return Thread.currentThread().getStackTrace(); } /** * 获得堆栈项 * * @param i 第几个堆栈项 * @return 堆栈项 */ public static StackTraceElement getStackTraceElement(int i) { StackTraceElement[] stackTrace = getStackTrace(); if (i < 0) { i += stackTrace.length; } return stackTrace[i]; } /** * 创建本地线程对象 * * @return 本地线程 */ public static ThreadLocal createThreadLocal() { return new ThreadLocal(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy