Java多线程和Spring多线程对比与使用

线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。 说明:使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。 

    //demo方法
    private void demo(){
        //TODO::业务逻辑代码
    }

    //显式创建线程,不推荐使用
    public void thread1() {
        new Thread(() -> demo()).start();
    }

    //线程池创建线程,推荐使用
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    public void thread2() {
        threadPoolTaskExecutor.execute(()->demo());
    }
    //显式创建线程,不推荐使用
    public void thread1(){
        // 添加操作日志
        new Thread(() -> {
            AdminLogRequest adminLogRequest = new AdminLogRequest();
            adminLogRequest.setAdminId(sysUserRequest.getOperatorId());
            adminLogRequest.setAdminName(sysUserRequest.getOperator());
            adminLogRequest.setOperationType(operationType);
            adminLogRequest.setTargetType(LogTargetType.ADMIN);
            adminLogRequest.setTargetId(finalSysUser.getUserId());
            adminLogRequest.setOperationLog(operationType.getDesc().concat("用户[")
                    .concat(finalSysUser.getFullName())
                    .concat("(").concat(finalSysUser.getUserName()).concat(")")
                    .concat("], 角色为[")
                    .concat(sysUserRequest.getRoleIds() == null ? "" :
                            Arrays.stream(sysUserRequest.getRoleIds().split(","))
                                    .map(Integer::valueOf)
                                    .map(sysRoleService::getRole)
                                    .map(SysRole::getRoleName)
                                    .collect(Collectors.joining(",")))
                    .concat("], 状态为[")
                    .concat(finalSysUser.getStatus().equals(Status.OPEN) ? "启用" : "禁用")
                    .concat("]")
            );
            adminLogService.addLog(adminLogRequest);
        }).start();
    }
    //线程池创建线程,推荐使用
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    public void thread2(){
        // 添加操作日志
        threadPoolTaskExecutor.execute(() -> {
            AdminLogRequest adminLogRequest = new AdminLogRequest();
            adminLogRequest.setAdminId(sysUserRequest.getOperatorId());
            adminLogRequest.setAdminName(sysUserRequest.getOperator());
            adminLogRequest.setOperationType(operationType);
            adminLogRequest.setTargetType(LogTargetType.ADMIN);
            adminLogRequest.setTargetId(finalSysUser.getUserId());
            adminLogRequest.setOperationLog(operationType.getDesc().concat("用户[")
                    .concat(finalSysUser.getFullName())
                    .concat("(").concat(finalSysUser.getUserName()).concat(")")
                    .concat("], 角色为[")
                    .concat(sysUserRequest.getRoleIds() == null ? "" :
                            Arrays.stream(sysUserRequest.getRoleIds().split(","))
                                    .map(Integer::valueOf)
                                    .map(sysRoleService::getRole)
                                    .map(SysRole::getRoleName)
                                    .collect(Collectors.joining(",")))
                    .concat("], 状态为[")
                    .concat(finalSysUser.getStatus().equals(Status.OPEN) ? "启用" : "禁用")
                    .concat("]")
            );
            adminLogService.addLog(adminLogRequest);
        });
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值