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