package com.gkhy.exam.common.utils; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.*; /** * 线程相关工具类 */ @Slf4j public class Threads { private static final Logger logger = LoggerFactory.getLogger(Threads.class); public static void printException(Runnable r,Throwable t){ if(t==null && r instanceof Future){ try { Future future= (Future) r; if(future.isDone()) { future.get(); } } catch (CancellationException e){ t=e; } catch (ExecutionException e) { t=e.getCause(); }catch (InterruptedException e) { Thread.currentThread().interrupt(); } } if(t!=null){ logger.error(t.getMessage(),t); } } public static void shutdownAndAwaitTermination(ExecutorService pool){ if(pool!=null && !pool.isShutdown()){ pool.shutdown(); try{ if(!pool.awaitTermination(120, TimeUnit.SECONDS)){ pool.shutdownNow(); if(!pool.awaitTermination(120,TimeUnit.SECONDS)){ log.info("Pool did not terminate"); } } }catch (InterruptedException ie){ pool.shutdownNow(); Thread.currentThread().interrupt(); } } } }