java多线程的简单应用

最近在做推送相关的模块,在群推时发现添加log效率比较低,特别是批量update操作,所以使用异步操作log比较好

建一个类AsynPushRecord,写从初始化方法设置线程基础参数

@PostConstruct
    public void init() {
        BlockingQueue<Runnable> taskQueue = new ArrayBlockingQueue<Runnable>(1024);
        threadPoolExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors() * 2, Runtime.getRuntime().availableProcessors() * 4, 60, TimeUnit.SECONDS, taskQueue);
        threadPoolExecutor.allowCoreThreadTimeOut(false);
    }

关于的ThreadPoolExecutor用法看看这个:https://www.cnblogs.com/zedosu/p/6665306.html

public void insertBanch(DriverPushRecordDTO driverPushRecordDTO, List<DriverAppPO> list) {
        threadPoolExecutor.execute(new BanchPORecord(driverPushRecordDTO, list));
    }

建一个方法用于insert,传入对象以及要insert的参数,实例化内部类调用execute开始执行

内部类

public class BanchPORecord implements Runnable{

        private List<DriverAppPO> list;
        private DriverPushRecordDTO driverPushRecordDTO;

        public BanchPORecord(DriverPushRecordDTO driverPushRecordDTO, List<DriverAppPO> list){
            this.driverPushRecordDTO = driverPushRecordDTO;
            this.list = list;
        }

        @Override
        public void run() {
            driverPushRecordDao.insertBatch(list, driverPushRecordDTO);
        }
    }

run执行动作异步添加log

我测了下果然有所见效,下面分别是1000条,5000条,10000条测试用例

测试用例
 1000500010000
线程不使用比使用多出(秒)1s3s5s

这只是简单应用记录,要弄明白原理并且知道什么场景用

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值