2.一个高并发买票的实例: 

马克-to-win:我 们现在回到春节高并发买票的问题。我们假设有一百万个人买一百张票,其中买票程序一百万个线程同时运行。不用改变mysql的缺省事务隔离级别。任何人在 买之前都用普通的select * from table来访问数据库获得目前的票数。假如现在是一百,之后大家一起点“下单”钮。这个钮所对应的程序可以这样:先select * from table for update,这样所有别人的select * from table for update这句话都会被挡住,这个时刻选出的数据库的票的存量是准确的。你可以加一个判断,比如如果存量大于1,我就买一张票。(有很多高并发程序,会 在这里加一个乐观锁版本的判断,如果还是老版本就做更新。马克-to-win:原理和目的和我们的例子是一样的)注意这里加判断,虽然耗时,但至关重要,(这也是很多公司的通 用做法)而且必须像这样独占排他挡住别人大张旗鼓的做。假如你不下决心独占排他的去做判断,当你真正更新的时候,也许数据已经被别人更改了。也许一秒前看 存量是一百,一秒之后已经变成零了。不判断就直接更新的话,数据库票数也许会变成负数。完成判断之后就是更新数据库票数减一张,当然还需做一些其他的工 作,比如订单表中需要增加一行记录是谁买的之类的,最后提交。之后队列中下一个事务就会被开始执行。这只是程序的一个总的思路,真正做项目还需考虑用户体 验比如超时问题,(connection query有超时timeout异常)或用户等得不耐烦,主动关闭窗口。这时数据库服务器就会照顾下一个select * from table for update。马克-to-win:真正做项目时,我们可以选择用select * from t for update nowait (不等待行锁释放,提示锁冲突,不返回结果)或select * from t for update wait 5 (等待5秒,若行锁仍未释放,则提示锁冲突,不返回结果)给用户提供三个选择,可以死等,不等,或等5秒。同时告诉用户现在多少人在队列中你的前面(每有 一个人发出请求,在ServletContext中就加1,完成就减1),大概多长时间可以到你,因为数据库完成一个用多长时间可以算出来。下面我们就给 出一个并发买票的简单实现。(本例子我们还用上章的register数据库表,用age变量代表车票数,道理是一样的)

例 1.2.1

package com;
import java.sql.*;
public class ConcurBuy_MarkToWin {
    void concurBuy() {
        Connection con = null;
        Statement s = null;
        try {
            con = DatabaseConn.getConnection();
            s = con.createStatement();
            System.out.println("11111111"+Thread.currentThread().getName());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        } finally {
            try {
                s.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            System.out.println("successfully in finally"+ con+Thread.currentThread().getName());
        }
    }
}
package com;
class MulThreMarkToWin extends Thread {
    public void run() {
    }
}
public class TestConcurBuy_MarkToWin {
    public static void main(String[] args) {
        Thread t1 = new MulThreMarkToWin();
        Thread t2 = new MulThreMarkToWin();
        t1.start();
        t2.start();

更多请看:https://blog.csdn.net/qq_44591615/article/details/109274985

一个高并发买票的实例相关推荐

  1. 【面试】如何设计一个高并发系统

    一.为什么需要秒杀系统? 电商平台本质是在线上撮合买卖双方的购销需求,达成交易.虽然是线上交易,但也遵守朴素的经济学原理,供求关系决定了商品的经济活动.当供求平衡时,买方和卖方处于对等关系,双方相对稳 ...

  2. 如何设计一个高并发高可用的秒杀或抢券系统

    一个大型网站应用一般都是从最初小规模网站甚至是单机应用发展而来的,为了让系统能够支持足够大的业务量,从前端到后端也采用了各种各样技术,前端静态资源压缩整合.使用CDN.分布式SOA架构.缓存.数据库加 ...

  3. php小程序秒抢高并发,PHP 如何设计一个高并发高可用的秒杀或抢券系统

    一个大型网站应用一般都是从最初小规模网站甚至是单机应用发展而来的,为了让系统能够支持足够大的业务量,从前端到后端也采用了各种各样技术,前端静态资源压缩整合.使用CDN.分布式SOA架构.缓存.数据库加 ...

  4. 【面试题】如何设计一个高并发的系统?

    每个行业都一样,人才都是分层次的,从事技术行业的程序员们更是如此,按照技术能力分为三六九等. 每个层次的人出去面试,面试官考察的方向是不一样的. 刚入职场的小白,会问你很多基础性的知识,有过几年经验的 ...

  5. mysql每秒支持多少并发_如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确 ...

  6. 一个springboot能支持多少并发_吃透这篇,你也能搭建出一个高并发和高性能的系统...

    " 什么是高并发?高并发是互联网分布式系统架构的性能指标之一,它通常是指单位时间内系统能够同时处理的请求数,简单点说,就是 QPS(Queries Per Second). 那么我们在谈论高 ...

  7. oom 如何避免 高并发_【面试题】如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 原文链接:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/high- ...

  8. 面试题:如何设计一个高并发系统?

    面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确实有真才实学,在互联网公司里干过高 ...

  9. php ssc 源码_吃透这篇,你也能搭建出一个高并发和高性能的系统

    什么是高并发?高并发是互联网分布式系统架构的性能指标之一,它通常是指单位时间内系统能够同时处理的请求数,简单点说,就是 QPS(Queries Per Second). 那么我们在谈论高并发的时候,究 ...

最新文章

  1. 兼容低版本迅雷的js调用
  2. typedef VS #define —— C语言中的 关键字 与 C指令
  3. 7、Linux中文件类型、文件属性
  4. Javascript 装载和执行
  5. 知道python网课答案_Python程序设计答案
  6. 服务器购买和远程连接
  7. 七步从Angular.JS菜鸟到专家(1):如何开始【转】
  8. freeMarker fmpp 解析PowerDesign PDM探索
  9. 3种常见的渗透测试漏洞总结,快来收藏√
  10. Android Multimedia框架总结(二十七)MediaCodec回顾
  11. php中的$_get参数带分号,PHP中GET传参,各参数之间使用分号(;)符号进行分隔。...
  12. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_4_方法引用_通过super引用父类的...
  13. 一台电子计算机埃尼阿克的介绍,世界之最——第一台电子计算机
  14. 庞皓计量经济学第四版_庞皓《计量经济学》(第4版)全套资料【教材+笔记+题库】...
  15. 苹果录屏功能没有声音_安卓最高清的录屏软件,没有之一,已解锁VIP功能!
  16. 如何安装TreeView控件
  17. hdu5773 The All-purpose Zero(LIS变形)
  18. windows开启nfs_win7专业版怎么开启nfs_win7专业版启用nfs步骤
  19. 虚幻基础之Gameplay游戏框架之Level和World
  20. 一支口红用了5年_一支口红多久该扔掉?保质期过了还能用吗?

热门文章

  1. OFDM中循环前缀CP的作用
  2. AXI总线学习-------从零开始详细学-------------连载(8)读数据通中字节通路,narrow transfer
  3. 小决心:确实奏效的好习惯养成方法
  4. 触摸键盘打开快捷方式_如何在Windows 10上使用键盘快捷方式打开文件资源管理器
  5. AngularJS 如何进行字符串换行 HTML 换行的互换
  6. 互联网时代 消费品企业如何减缓焦虑?
  7. Sersync和lsyncd实现数据实时同步
  8. vue的 data 文本 中使用换行 \n
  9. Python是个什么鬼?
  10. 日常 - CompletableFuture 异步网约车服务超时未关闭