首页 > 代码库 > 代码层面控制同一用户短时间内重复下单的模拟代码

代码层面控制同一用户短时间内重复下单的模拟代码

写在前面:

    大量用户同时下单时,如何控制同一用户重复下单?

package com.fulh.thread;

public class LockId {
    
    public static void main(String[] args) {
        //模拟不同操作员同时操作的场景
        /*for(int i=0;i<100;i++){
            new Thread(new Person(String.valueOf(i)),String.valueOf(i)).start();;
        }*/
        
        //模拟统一操作员短时间内多次操作的场景
        for(int i=0;i<100;i++){
            new Thread(new Person("1"),String.valueOf(i)).start();
        }
    }
}

/**
 * @ClassName: LockId.java
 * @Description: 模拟操作员信息
 *
 * @version: v1.0.0
 * @author: fulh
 * @date: 2017年3月24日 下午5:47:08 
 *
 * Modification History:
 * Date         Author          Version            Description
 *------------------------------------------------------------
 * 2017年3月24日       fulh            v1.1.0               修改原因
 */
class Person implements Runnable {

    private String id;
    
    public Person(){}
    
    public Person(String id){
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public void run() {
        
        //对操作员id加锁(当然也可以对其他操作员唯一标识进行加锁)
        synchronized (id) {
            try {
                System.out.println(Thread.currentThread().getName() + " 线程休眠了...");
                Thread.sleep(2000);
                System.out.println(Thread.currentThread().getName() + " 线程走完了...,当前时间:" + System.currentTimeMillis());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}

结果如下:①模拟同一操作员多次操作的情景:线程会出现等待

0 线程休眠了...
0 线程走完了...,当前时间:1490349092102
99 线程休眠了...
99 线程走完了...,当前时间:1490349094103
97 线程休眠了...
97 线程走完了...,当前时间:1490349096104
98 线程休眠了...
98 线程走完了...,当前时间:1490349098104
96 线程休眠了...
96 线程走完了...,当前时间:1490349100105
95 线程休眠了...
95 线程走完了...,当前时间:1490349102105
94 线程休眠了...
94 线程走完了...,当前时间:1490349104107
93 线程休眠了...
93 线程走完了...,当前时间:1490349106107
92 线程休眠了...
92 线程走完了...,当前时间:1490349108107
91 线程休眠了...

  ②模拟不同操作员同时操作的情景:线程不会等待

0 线程休眠了...
4 线程休眠了...
2 线程休眠了...
9 线程休眠了...
3 线程休眠了...
6 线程休眠了...
5 线程休眠了...
1 线程休眠了...
10 线程休眠了...
12 线程休眠了...
11 线程休眠了...
8 线程休眠了...
14 线程休眠了...
7 线程休眠了...

  

代码层面控制同一用户短时间内重复下单的模拟代码