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

写在前面:

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

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 线程休眠了...

  

时间: 2024-10-09 12:42:44

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

微信快速开发框架V2.3--增加语音识别及网页获取用户信息(八),代码已更新至Github

不知不觉,版本以每周更新一次的脚步进行着,接下来应该是重构我的代码及框架的结构,有朋友反应代码有点乱,确实如此,当时写的时候只是按照订阅号来写的,后来才慢慢增加到支持API接口.目前还在开发第三方微信平台,旨在使用户能够无需自己开发就能简易搭建微信平台. 更新内容 1.增加支持语音识别 2.增加"网页授权获取用户基本信息" 语音识别其实是对Voice信息的一个扩展,您必须启用语音识别功能,启用后会在VoiceMessage中增加一个Recongnition字段,我们可以判断这个字段的内

从代码层面优化系统性能应该怎么做?

我们以前看到的很多架构变迁或者演进方面的文章大多都是针对架构方面的介绍,很少有针对代码级别的性能优化介绍.本文将针对一些代码细节方面的东西进行介绍. 服务器环境 服务器配置:4 核 CPU,8G 内存,共 4 台 MQ:RabbitMQ 数据库:DB2 SOA 框架:公司内部封装的 Dubbo 缓存框架:Redis.Memcached 统一配置管理系统:公司内部开发的系统 问题描述 单台 40TPS,加到 4 台服务器能到 60TPS,扩展性几乎没有. 在实际生产环境中,经常出现数据库死锁导致整

UWP忽略短时间内重复触发的事件

原文:UWP忽略短时间内重复触发的事件 原链接:UWP忽略短时间内重复触发的事件 - 超威蓝火 做移动端开发的可能都会遇到这种需求,当用户点击一个按钮之后,由于没有异步,或者设备性能很差等等原因,程序卡住了.但是用户不知道是咋回事啊,就开始狂点按钮,结果请求很多次资源,或者构造了很多重复视图.安卓上有很多介绍如何忽略重复点击的情况,uwp里我好像还没找到,那接下来就说一说我的方法吧. 首先是官方最常用的,从Windows诞生之初用到现在的,点击按钮之后把他Disable掉,等完成了在Enable

黄聪:如何用代码设置控制自己网站的网页在360浏览器打开时强制优先使用极速模式,而非兼容模式

最近用360浏览器访问自己的网站,发现都是被优先选用兼容模式打开,这使得网站很难看.为了让360浏览器打开网站的时候优先试用极速模式,找了一下官方论坛,发现了解决方案. 在head标签中添加一行代码: <html> <head> <meta name="renderer" content="webkit|ie-comp|ie-stand"> </head> <body> </body> <

修改CAS实现控制某个用户在定义的时间内登录次数

思想: 在数据库增加字段  1.登录次数 2.登录失败时间(类型TimeStamp) 当一个用户进来认证的时候当登录失败的时候更新登录次数 和最后登录失败的时间. 主要是在登录成功或者失败的时候判断时间差是不是大于定义的时间,要数大于得话得更新登陆次数和失败时间. 成功的时候把登陆次数更新,而不更新登录错误时间 登录失败的时候把登陆次数更新为最大次数减一,把错误时间更新到当前. 具体在CAS中的实现 修改web-flow 验证路口:先修改配置文件cas-servlet.xml 详细见此页:htt

代码质量检查工具FindBugs和Simian(重复率)

1. 代码质量检查工具FindBugs和Simian(百度网盘分享地址). 2. 使用Ant集成.(Ant入门 外链). 3. 执行文件.staticCheck.xml <?xml version="1.0" encoding="UTF-8" ?> <project name= "staticCheck" default="check" basedir="../"> <prop

C++ 控制台代码输出控制

在C++控制台应用程序中可以控制控制台输出的字体颜色和 接受任意按键退出 #ifndef CONSOLE_UTILS_H #define CONSOLE_UTILS_H #include <windows.h> #include <conio.h> #include <iostream> //default text colors can be found in wincon.h inline void SetTextColor(WORD colors) { HANDL

xcode中用oc代码基本控制view控件

控件代码部分: 编译运行后的结果为: 复杂一点的: 结果为: xcode中用oc代码基本控制view控件,布布扣,bubuko.com

[zz]如何控制ftp用户可以切换到ftp home目录的上级目录

mkdir /var/ftp //(创建ftp目录) chown ftp /var/ftp/ //(让用户ftp成为 /var/ftp的所有者,后面我们会禁用匿名访问,所以这步是必须的) chmod o-x /var/ftp/* (撤销用户ftp 对/var/ftp/下的所有文件的执行权限,这样会更安全些.*/ passwd ftp //(设置用户ftp的密码) vim /etc/password //(编辑password文件,将ftp的home目录更为:/var/ftp) vim /etc/