栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

并发出来同一个订单问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

并发出来同一个订单问题

当存在并发对同一个订单都做更想操作时,怎么才能保证各自的线程有效的执行呢?
采用悲观锁处理方式:@Lock(LockModeType.PESSIMISTIC_WRITE)

AreaPO.java
@Data
@EqualsAndHashCode()
@Accessors(chain = true)
@Entity
@Table(name = "AREA_INFO")
public class AreaInfoPO {

    
    @Id
    @Column(name = "AREA_ID", length = 50)
    @GeneratedValue(generator = "idGenerator")
    @GenericGenerator(name = "idGenerator", strategy = com.tz.common.util.IdGenerator", parameters = {
            @org.hibernate.annotations.Parameter(name = "prefix", value = "area")})
    private String areaId;
    
    @Column(name = "AVAIL_STATE", length = 1)
    private String availState;
    
    @Column(name = "AREA_NAME", length = 128)
    private String areaName;
    
    @Column(name = "AREA_TYPE", length = 1)
    private String areaType;
    
    @Column(name = "AREA_DESC", length = 1024)
    private String areaDesc;
    
    @Column(name = "CRT_TIME")
    private LocalDateTime crtTime;
    
    @Column(name = "PARENT_AREA_ID", length = 50)
    private String parentAreaId;

    
    @Column(name = "NUM", length = 11)
    private Integer num;
}
AreaVO.java
@Data
@ApiModel(description = "申请单VO")
public class AreaInfoVO {
    @ApiModelProperty("区域主键")
    private String areaId;
    @ApiModelProperty("可用状态:1-可用,0-不可用")
    private String availState;
    @ApiModelProperty("可用状态中文名")
    private String availStateName;
    @ApiModelProperty("区域名称")
    private String areaName;
    @ApiModelProperty("区域类型:1-总行,2-分行")
    private String areaType;
    @ApiModelProperty("区域类型中文名")
    private String areaTypeName;
    @ApiModelProperty("区域描述")
    private String areaDesc;
    @ApiModelProperty("创建时间")
    private LocalDateTime crtTime;
    @ApiModelProperty("上级区域")
    private String parentAreaId;
    @ApiModelProperty("上级区域名称")
    private String parentAreaName;
    @ApiModelProperty("区域序号")
    private Integer num;
}

AreaInfoServiceImp.java

	@Override
    @Transactional
    public void testBatch() {
        AreaInfoVO areaInfoPO = mapper.poToVO(areaInfoDao.queryById("area-123"));
        if (areaInfoPO != null){
            log.info("num = {}",areaInfoPO.getNum());
            areaInfoPO.setNum(areaInfoPO.getNum()+1);
            areaInfoDao.save(mapper.voToPO(areaInfoPO));
        }
    }
AreaIndoDao.java
    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Query("select s from AreaInfoPO s where s.areaId = :#{#id} ")
    AreaInfoPO queryById(String id);
Test.java
import org.springframework.web.client.RestTemplate;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Test {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(15);
        for (int i = 0; i < 15; i++) {
            executor.submit(new R());
        }
    }
}

class R implements Runnable {

    @Override
    public void run() {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getForObject("http://127.0.0.1:8080/aweb/areaInfo/test", String.class);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931211.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号