Executors.newSingleThreadExecutor()
只有一个线程,无任务暂缓线程
Executors.newFixedThreadPool()
固定线程数量,无任务暂缓线程
Executors.newCachedThreadPool()
根据内存情况调整线程个数,不限制线程个数(可能会OOM),线程空闲60秒自动回收
Executors.newScheduledThreadPool()
返回ScheduledExecutorService对象
应用newFixedThreadPool()
/**
* Created by hurf on 2016/8/24.
* 多线程帮助类
*/
public class ThreadsUtil {
public static ExecutorService executor = Executors.newFixedThreadPool(12);
/**
* 统一超时调用入口
* @param callable
* @return <T>
* 调用实例:
* String result = ThreadsUtil.execInTime(new CallableImpl("入参"));
* class CallableImpl implements Callable<String> { private String key = ""; public CallableImpl(String key) {this.key = key;} ...}
*/
public static <T> T execInTime(Callable<T> callable) {
Future<T> future = executor.submit(callable);
T t = null;
try {
t = future.get(CallAtomUtil.timeOutLen, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
String cuase = ObjectUtils.toString(e.getCause()).replace(toReplaceStr,",");
String eMsg = "等待远程调用结果时被中断,详细情况如下:【"+cuase+"】";
LogUtil.error(eMsg);
future.cancel(true);
throw new AtomException(-6787,eMsg, FrameworkConstants.BIZ_LVL);
}