import org.slf4j.MDC;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.Map;
@SuppressWarnings("all")
public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
@Override
public void execute(Runnable runnable) {
Map<String, String> context = MDC.getCopyOfContextMap();
super.execute(() -> run(runnable, context));
}
private void run(Runnable runnable, Map<String, String> context) {
if (context != null) {
try {
MDC.setContextMap(context);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
try {
runnable.run();
} finally {
MDC.clear();
}
}
}
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
public class ThreadTaskUtils {
private static MdcThreadPoolTaskExecutor taskExecutor = null;
static {
taskExecutor = new MdcThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(5);
taskExecutor.setMaxPoolSize(50);
taskExecutor.setQueueCapacity(1000);
taskExecutor.setKeepAliveSeconds(120);
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
taskExecutor.initialize();
}
public static void run(Runnable runnable) {
taskExecutor.execute(runnable);
}
public static <T> Future<T> submit(Callable<T> task) {
return taskExecutor.submit(task);
}
public static void main(String[] args) {
System.out.println("开始。。。。。。。");
ThreadTaskUtils.run(()->{
for (int i = 0; i < 1000; i++) {
System.out.println(i);
}
});
System.out.println("结束。。。。。。。");
}
}
ThreadTaskUtils.run(`在这里插入代码片`()->{
Connection conn=null;
CallableStatement ctmt=null;
try {
conn = DBUtilMySql.getConnection();
String sqlCall = "{call sp_mkt_dtl_grp_survey_phone_sjsw_mon(?,?,?)}";
ctmt = conn.prepareCall(sqlCall);
ctmt.setInt("in_stat_month", Integer.parseInt(time));
ctmt.execute();
} catch (SQLException throwables) {
throwables.printStackTrace();
logger.error("存储过程调用失败",throwables);
}finally {
try {
if(null != conn){
conn.close();
}
if (null != ctmt){
ctmt.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
});