线程池工具类的使用及开启编程式事务

一.线程池工具类

/**
 * 线程池工具类
 * @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在多线程中不支持,故开启编程式事务
如果代码逻辑中不涉及事务控制可以去除编程式事务

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值