`
感觉贱贱哒
  • 浏览: 4261 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

高并发如何保证线程执行的先后顺序

 
阅读更多

log4j日志时间点                                    线程号                              操作数据库动作

2017-10-21 12:32:52,804  http-bio-8080-exec-150  select TOTAL_DAY_LIMIT null then insert 0 commit;

 

2017-10-21 12:32:52,842  http-bio-8080-exec-152  select TOTAL_DAY_LIMIT 0

 

2017-10-21 12:32:53,224  http-bio-8080-exec-150  update TOTAL_DAY_LIMIT+1--->TOTAL_DAY_LIMIT='1' commit;

 

2017-10-21 12:32:53,325 http-bio-8080-exec-153  select TOTAL_DAY_LIMIT 1

 

2017-10-21 12:32:53,475 http-bio-8080-exec-152  update TOTAL_DAY_LIMIT+1--->TOTAL_DAY_LIMIT='2' commit;

 

2017-10-21 12:32:53,564  http-bio-8080-exec-154select TOTAL_DAY_LIMIT 2 限额超限,拒绝交易

 

2017-10-21 12:32:53,718  http-bio-8080-exec-153  update TOTAL_DAY_LIMIT+1--->TOTAL_DAY_LIMIT='3' commit;

 

正常交易流程:客户单卡单日累计限额为2元(TOTAL_DAY_LIMIT),并发4笔交易,每笔交易1元,当客户消费第3笔时,限额超限,拒绝交易,

数据库应该记录限额为2元(TOTAL_DAY_LIMIT)

实际交易流程:客户单卡单日累计限额为2元(TOTAL_DAY_LIMIT),并发4笔交易,每笔交易1元,当客户消费第4笔时,限额超限,拒绝交易,

数据库应该记录限额为3元(TOTAL_DAY_LIMIT),原因如上。

 

 

有没有好的解决方案呢,按照正常的交易流程。

 

分享到:
评论

相关推荐

    高并发多线程面试专题及答案(上).pdf

    Synchronized默认是非公平锁,意味着线程在获取锁时,不保证按照请求锁的先后顺序进行。这种方式可以减少上下文切换的开销,但可能导致某些线程“饥饿”。如果需要实现公平锁,可以使用ReentrantLock,并设置其公平...

    多线程,高并发面试题.pdf

    同步是指多线程顺序执行,即线程间有先后顺序,一个线程执行完任务后,下一个线程才开始执行;异步则指线程之间不存在严格的顺序关系,一个线程可以在另一个线程任务还未完成时就启动。同步适用于对共享资源的操作,...

    高并发常见面试题(深入底层).docx

    - **有序性**: 通过禁止指令重排序来保证程序执行的顺序符合代码的先后顺序。 **2.3 指令重排序的影响** 在多线程环境中,指令重排序可能会导致线程间通信的问题。例如,假设线程A执行了`a = 1; b = 2;`这两条语句...

    Java高级面试题,经典多线程并发问题和答案

    - **定义**:有序性意味着程序的执行顺序遵循代码的先后顺序。 - **作用**:确保程序的行为符合预期,避免因指令重排序导致的逻辑错误。 - **实现方式**:Java内存模型允许编译器和处理器对指令进行重排序,但是...

    并发与实时系统软件设计 7-9讲

    互斥锁、信号量等同步工具用于避免多个任务同时访问同一资源导致的冲突,而同步则关注于确保任务按照既定的顺序执行,避免产生竞态条件。死锁预防和检测机制的实现是防止系统因资源分配不当而进入无法工作的状态。...

    java线程安全总结

    有序性是指程序执行的顺序按照代码的先后顺序执行。在单线程环境中,代码的执行顺序通常是由编译器和处理器的优化来决定的。但在多线程环境中,如果不采取适当的措施,可能会出现指令重排序导致的问题。 1. **...

    深入理解Java多线程与并发编程

    一般来说,处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证程序中各个语句的执行先后顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。 二、Java内存模型 ...

    深入理解-Java-多线程核心知识:跳槽面试必备.docx

    线程优先级用于控制线程执行的先后顺序,优先级高的线程通常会得到更多执行机会。线程的优先级范围通常为1到10,其中10为最高优先级。 线程调度器会选择优先级最高的线程执行,但在某些情况下(如线程调用`yield()`...

    Java多线程相关知识总结

    - 在实际应用中,多线程并发输出的结果可能会出现先后顺序不确定的情况,这是由于线程在就绪和运行状态之间频繁切换导致的。 #### 二、实现线程 在Java中,实现线程主要有两种方式: 1. **继承Thread类**: - ...

    Java并发编程面试题(2024最新版)-重点.docx

    - **有序性:**程序执行的顺序按照代码的先后顺序执行。 **3. 多线程的概念及优劣:** - **定义:**多线程是指在一个程序中包含多个执行路径的技术。 - **优点:** - 提高系统资源的利用率。 - 增强程序的响应性...

    并发编程面试题(2020最新版)

    有序性是指程序执行的顺序按照代码的先后顺序执行。 在Java程序中保证多线程运行安全,通常需要使用同步机制来控制对共享资源的并发访问。这包括使用synchronized关键字、显式锁Lock、volatile关键字等手段。这些...

    大厂真题之拼多多-Java高级

    1、并发编程三要素? (1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要 么就全部都不执行。... (3)有序性 有序性,即程序的执行顺序按照代码的先后顺序来执行。

    Elevator.rar_java_java多线程电梯_throughca8_电梯 多线程_电梯调度

    在Java编程领域,多线程电梯调度算法是一个重要的实践课题,尤其在分布式系统和并发处理中具有很高的实用价值。这个"Elevator.rar"压缩包文件包含了关于实现多线程电梯调度算法的相关代码,主要针对3部电梯进行统一...

    java并发编程实践

    这意味着线程的执行并不是按照创建的先后顺序,而是由操作系统根据线程优先级和其他因素动态决定哪个线程获得CPU资源。Java线程默认的优先级为`NORM_PRIORITY`(5),可以通过`setPriority()`方法调整线程优先级。 ...

    Java并发编程面试题(2022最新版)

    - **时间分片:** 把CPU时间分成若干时间片,轮流分配给各个线程执行。 **与线程同步以及线程调度相关的方法** - **sleep():** 让当前线程暂停一段时间。 - **wait():** 放弃对象锁,进入等待此对象的等待锁定池...

    同时多线程处理器前端系统的研究的开题报告.pdf

    它的主要功能是接收多个线程的指令流,并对这些指令进行高效的处理与调度,以便后端处理器能够按照指令的先后顺序和相关性进行执行。由于现代应用程序往往具有高度的并发性,所以高效的多线程处理器前端系统是实现高...

    java并发技术

    - **有序性**:程序执行的顺序按照代码的先后顺序执行。 - **原子性**:操作或者读写是不可中断的。 #### 2.2 锁机制 - **synchronized关键字**:是Java中最基本的锁机制之一,可以用于方法级或者代码块级。 - **...

    进程与线程

    - **先来先服务(FCFS)**:按照进程到达的先后顺序进行调度。 - **短作业优先(SJF)**:优先调度执行时间较短的进程。 - **最高响应比优先(HRRN)**:结合了FCFS和SJF的优点,考虑了等待时间和执行时间。 - **时间片...

    《多处理器编程艺术》课后答案

    具体来说,锁的实现必须涉及到写操作,因为如果第一条指令是读,那么线程无法区分先后顺序;如果只写不读,线程无法构建全局视图;如果既写又读,则能够通过某些顺序得到互斥效果。 ### Peterson算法 Peterson算法...

Global site tag (gtag.js) - Google Analytics