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

com.github.xiaoyuge5201.thread.Executor Maven / Gradle / Ivy

There is a newer version: 1.3.5
Show newest version
package com.github.xiaoyuge5201.thread;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.*;

/**
 * 线程池工具
 * @author liushiquan,luxiaolei
 */
public class Executor {
	private static Logger logger = LoggerFactory.getLogger(Executor.class);
	private static ExecutorService executor = Executors.newCachedThreadPool();

	/**
	 * 直接在公共线程池中执行线程
	 * @param runnable 可运行对象
	 */
	public static void execute(Runnable runnable) {
		try {
			executor.execute(runnable);
		} catch (Exception e) {
			logger.error("Exception when running task: " + e, 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();
	}
	
	/**
	 * 执行异步方法
	 * @param runnable 需要执行的方法体
	 * @return 执行的方法体
	 */
	public static BaseRunnable excAsync(final BaseRunnable 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); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy