模拟多线程并发订单处理功能实现

本文介绍了一个模拟多线程并发处理订单的实现,通过实例锁确保手动和自动处理订单时互不冲突。使用CopyOnWriteArrayList作为并发安全的待处理订单队列,并通过令牌机制确保加锁和解锁的线程一致性,以防止程序错误。作者意识到自己在多线程知识上的不足,计划进一步学习和提升。
摘要由CSDN通过智能技术生成

在目前的应用开发中,有一个需要自动处理某状态订单的功能,需要和手动处理功能并行不能冲突和重复处理。目前大致写了一下demo实现,记录一下,方便以后有时间复习和改进。实现思路也比较简单,就是处理每笔订单的时候加个锁,无论是手动还是自动,都需要取得订单锁后才能处理,待处理订单队列方面,因为要考虑并发动态的添加或移除订单元素,暂时采用CopyOnWriteArrayList(ConcurrentHashMap也可以)来实现。加锁和解锁的过程都加了令牌,一来方便测试时验证加锁和解锁的是否为同一线程;二来也可以避免工程中误调解锁功能而导致程序出错。感觉对线程这块的知识掌握的还是不够深入,以后要多多加强。代码如下:

import java.util.List;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CyclicBarrier;

public class ThreadTest {
    //需要处理的订单数量,
    private static int MAX_ORDERS=10000;
    //最大线程数
    private  static  int MAX_THREADS =100;
    //每个线程睡眠时间(订单处理时间)
    private static  int SLEEP =10;
    //写复制list,支持并发修改和遍历功能,需要注意内存耗费的问题,可以采用ConcurrentHashMap等代替
    private static  List<Order> list=new CopyOnWriteArrayList<>();//new CopyOnWriteArrayList<>();//new ArrayList<>();
    static {
 //初始化测试数据
        for(int i=0;i<MAX_ORDERS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吾生有牙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值