IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 「高并发秒杀,阿里P7手把手教你 -> 正文阅读

[Java知识库]「高并发秒杀,阿里P7手把手教你

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT=‘红包信息表’

*   抢红包记录表

CREATE TABLE red_packet_record (

id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘自增主键’,

amount int(11) NOT NULL COMMENT ‘抢到红包的金额’,

red_packet_id bigint(20) NOT NULL COMMENT ‘红包ID’,

uid int(11) NOT NULL COMMENT ‘抢到红包用户的用户标识’,

create_time datetime DEFAULT NULL COMMENT ‘创建时间’,

PRIMARY KEY (id)

) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT=‘抢红包记录表’

## **代码案例**

老板发了10个红包一共200人民币,100个人同时抢红包,伪代码分别为拆红包和抢红包相关业务逻辑。模拟抢红包伪代码:

/**

 * 抢红包 拆红包 抢到不一定能拆到

 * @param redPacketId

 * @return

 */

@ApiOperation(value="抢红包二",nickname="爪哇笔记")

@PostMapping("/startTwo")

public Result startTwo(long redPacketId){

    int skillNum = 100;

    final CountDownLatch latch = new CountDownLatch(skillNum);//N个抢红包

    /**

     * 初始化红包数据,抢红包拦截

     */

    redisUtil.cacheValue(redPacketId+"-num",10);

    /**

     * 初始化红包金额,单位为分

     */

    redisUtil.cacheValue(redPacketId+"-money",20000);

    /**

     * 模拟100个用户抢10个红包

     */

    for(int i=1;i<=skillNum;i++){

        int userId = i;

        Runnable task = () -> {

            /**

             * 抢红包 判断剩余金额

             */

            Integer money = (Integer) redisUtil.getValue(redPacketId+"-money");

            if(money>0){

                /**

                 * 虽然能抢到 但是不一定能拆到

                 * 类似于微信的 点击红包显示抢的按钮

                 */

                Result result = redPacketService.startTwoSeckil(redPacketId,userId);

                if(result.get("code").toString().equals("500")){

                    LOGGER.info("用户{}手慢了,红包派完了",userId);

                }else{

                    Double amount = DoubleUtil.divide(Double.parseDouble(result.get("msg").toString()), (double) 100);

                    LOGGER.info("用户{}抢红包成功,金额:{}", userId,amount);

                }

            }else{

                /**

                 * 直接显示手慢了,红包派完了

                 */

                //LOGGER.info("用户{}手慢了,红包派完了",userId);

            }

            latch.countDown();

        };

        executor.execute(task);

    }

    try {

        latch.await();

        Integer restMoney = Integer.parseInt(redisUtil.getValue(redPacketId+"-money").toString());

        LOGGER.info("剩余金额:{}",restMoney);

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

    return Result.ok();

}
业务层拆红包:
@Override

@Transactional

public Result startTwoSeckil(long redPacketId, int userId) {

    Integer money = 0;

    boolean res=false;

    try {

        /**

         * 获取锁 保证红包数量和计算红白金额的原子性操作

         */

        res = RedissLockUtil.tryLock(redPacketId+"", TimeUnit.SECONDS, 3, 10);

        if(res){

            long restPeople = redisUtil.decr(redPacketId+"-num",1);

            if(restPeople>0){

                /**

                 * 如果是最后一人

                 */

                if(restPeople==1){

                    money = Integer.parseInt(redisUtil.getValue(redPacketId+"-money").toString());

                }else{

                    Integer restMoney = Integer.parseInt(redisUtil.getValue(redPacketId+"-money").toString());

最后

经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。如有需要获取资料文档的朋友,可以点击这里免费获取






.(img-oQ03fL0n-1630159917371)]
[外链图片转存中…(img-x8Pvdzl6-1630159917372)]
[外链图片转存中…(img-1CSHVrGn-1630159917373)]
[外链图片转存中…(img-MTaBUW74-1630159917374)]
[外链图片转存中…(img-eGIDK4gJ-1630159917375)]

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 11:46:23  更:2021-09-03 11:46:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:48:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码