一.线程池工具
/** * 线程池工具 * @author ljc * @version 1.0 * @date 2019/6/10/0010 - 09:47 */ public class ThreadPoolUtils { /** * 即使没有任务,核心线程数也会一直存活,线程池也将维护线程的最小数量 */ private static final int SIZE_CORE_POOL = 5; /** * 最大数量的线程池维护线程 */ private static final int SIZE_MAX_POOL = 10; /** * 线程池维护线程允许的空闲时间 */ private static final long ALIVE_TIME = 2000; /** * 线程缓冲队列,当core当线程被线程任务占据时,如果此时有新的线程任务进来,那么新的线程任务将被排除在外BlockingQueue<Runnable>队列中 */ private static BlockingQueue<Runnable> bqueue = new ArrayBlockingQueue<Runnable>(100); private static ThreadPoolExecutor pool = new ThreadPoolExecutor(SIZE_CORE_POOL, SIZE_MAX_POOL, ALIVE_TIME, TimeUnit.MILLISECONDS, bqueue, new ThreadPoolExecutor.CallerRunsPolicy()); private ThreadPoolUtils(){} static { pool.prestartAllCoreThreads(); } public static ThreadPoolExecutor getPool() { return pool; } }
二.编程事务的使用和开启
ThreadPoolUtils.getPool().submit(new Runnable() { @Override public void run() { ///开始编程事务 transactionTemplate.execute(new TransactionCallback<Boolean>() { @Override public Boolean doInTransaction(TransactionStatus transactionStatus) { try { ---代码逻辑---- return true; } catch (Exception e) { //事务回滚; transactionStatus.setRollbackOnly(); e.printStackTrace(); return false; } } }); } }); }
注: @Transactional不支持多线程,所以开始编程事务 如果代码逻辑不涉及事务控制,可以删除编程事务