使用java做订单失效(指定一段时间后)

本文分享了如何在公司项目中利用Java编写代码,实现订单在一小时有效期后自动变为失效状态,以满足业务需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人所在的公司有个需求是订单为1小时有效期,过了有效期之后订单即置为失效,代码贴出来跟大家分享一下

import java.util.concurrent.TimeUnit;

public class OrderTest {
    public static void main(String[] args) {
        for(int i = 1;i <= 10;i++){
            final int id = i;
            new Thread(new Runnable(){
                @Override
                public void run() {
                    System.out.println(System.currentTimeMillis());
                    new Order(id,new ScheduleTime(3, TimeUnit.SECONDS),0);
                }
            }).start();
        }
    }
}

/**
 * 订单类
 * @author pipi
 *
 */
public class Order {
    private Integer id; //订单id
    private Integer status; //订单状态,0为未付款,1为已付款,-1为已失效
    private ScheduleTime time;
    public Order(Integer id,ScheduleTime time,Integer status){
        this.id = id;
        this.time = time;
        this.status = status;
        OrderSchedule.getInstance().startTask(new OrderFailure(this), time);
    }

    public boolean isAlive(){
        return status != -1;
    }

    public Integer getId() {
        return id;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }
}

import java.util.concurrent.TimeUnit;

public class ScheduleTime {
    private long delay;
    private TimeUnit time;
    public ScheduleTime(long delay,TimeUnit time){
        this.delay = delay;
        this.time = time;
    }
    public long getDelay() {
        return delay;
    }
    public void setDelay(long delay) {
        this.delay = delay;
    }
    public TimeUnit getTime() {
        return time;
    }
    public void setTime(TimeUnit time) {
        this.time = time;
    }

}

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

/**
 * 调度器
 * @author pipi
 *
 */
public class OrderSchedule {
    private static ScheduledExecutorService Manager;
    private static OrderSchedule orderSchedule;

    static{
        Manager = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
    }

    private OrderSchedule(){
    }

    public synchronized static OrderSchedule getInstance(){
        if(orderSchedule == null){
            orderSchedule = new OrderSchedule();
        }
        return orderSchedule;
    }

    /**
     * 预约订单时调用,一段时间后订单失效
     */
    public void startTask(OrderFailure task,ScheduleTime time){
        Manager.schedule(task,time.getDelay(),time.getTime());
    }
}

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 订单失效操作
 * @author pipi
 *
 */
public class OrderFailure implements Runnable{
    private Order order;
    private static Lock lock = new ReentrantLock();
    public OrderFailure(Order order){
        this.order = order;
    }

    @Override
    public void run() {
        if(order.getStatus() == 1) System.out.println("订单已付款,不执行失效任务");
        else{
            lock.lock();
            try{
                order.setStatus(-1);
                System.out.println("id为" + order.getId() + "的订单,失效任务执行");
                System.out.println(System.currentTimeMillis());
            }finally{
                lock.unlock();
            }


        }
    }

    /**
     * 返回订单是否付款
     * @return
     */
    public boolean isPay(){
        if(order.getStatus() == 1) return true;
        else return false;
    }
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值