热门文章
- Google Guava官方教程(中文版) 753,788 人阅读
- Java NIO系列教程(一) Java NIO 概述 561,874 人阅读
- Java NIO 系列教程 388,025 人阅读
- Java并发性和多线程介绍目录 385,055 人阅读
- Java NIO系列教程(十二) Java NIO与IO 338,003 人阅读
- Java NIO系列教程(六) Selector 274,973 人阅读
- Java NIO系列教程(三) Buffer 272,844 人阅读
- Java NIO系列教程(二) Channel 267,819 人阅读
- Java8初体验(二)Stream语法详解 261,377 人阅读
- 69道Spring面试题和答案 232,119 人阅读
- 并发框架Disruptor译文 211,505 人阅读
- 《Storm入门》中文版 199,059 人阅读
- Netty 5用户指南 198,229 人阅读
- 面试题 181,838 人阅读
- [Google Guava] 2.3-强大的集合工具类:ja... 180,410 人阅读
- [Google Guava] 3-缓存 175,107 人阅读
- Java NIO系列教程(八) SocketChannel 167,864 人阅读
- 如何创建并运行java线程 162,931 人阅读
- Java 7 并发编程指南中文版 160,010 人阅读
- 聊聊并发(三)Java线程池的分析和使用 157,939 人阅读
近期文章
- 深度剖析Apache Dubbo核心技术内幕
- Java Volatile关键字
- 走进Java
- Dubbo中参数回调 Callback 实现深究
- 一个线程罢工的诡异事件
- Java并发之AQS详解
- 线程安全的可控制最大容量且带有过期时间的本地缓存
- 透过CountDownLatch窥探AQS
- 下一代的多语言JVM:GraalVM
- 手撕面试题ThreadLocal!!!
- Java 10的类型推导
- 谈谈Netty的线程模型
- JVM之动态方法调用:invokedynamic
- Java 异步编程导论
- JVM优化之循环展开
- 看完这篇还不清楚Netty的内存管理,那我就哭了!
- JVM优化之逃逸分析及锁消除
- (译文)InnoDB中的AUTO_INCREMENT处理
- JVM优化之逃逸分析与分配消除
- Reactive(响应式)编程-Reactor
- (译文)Java中使用var声明局部变量指南
- 我们为什么要用Redis
- 领域驱动设计-什么是领域驱动设计和怎么使用它
- Java并发-不懂原理多吃亏
- 记一次时隔两年后的JavaWeb项目重构总结
- 警报:线上事故之CountDownLatch的威力
- JEP 286: 局部变量类型推断(JEP 286: Local-Variable Type Inference)
- 你真的懂得Java-OOP吗?
- Apache Log4j 2 用户指南
- 《Apache Log4j 2 用户指南》简介
分类目录
- Android (3)
- Architecture (2)
- C++ (12)
- CPU (2)
- Framework (74)
- akka (20)
- GO (6)
- groovy (6)
- guava (24)
- JAVA (986)
- JVM (48)
- linux (10)
- microservices (1)
- Netty (32)
- Python (2)
- react (6)
- redis (26)
- Scala (11)
- spark (19)
- Spring (23)
- storm (44)
- thinking (3)
- Velocity (10)
- Web (18)
- zookeeper (1)
- 公告 (5)
- 区块链 (3)
- 大数据 (35)
- 好文推荐 (36)
- 并发书籍 (97)
- 并发译文 (418)
- 感悟 (6)
- 技术问答 (12)
- 敏捷管理 (6)
- 本站原创 (89)
- 架构 (39)
- 活动 (5)
- 网络 (7)
- 面试 (2)
标签
actor
Basic
classes
collections
concurrency
Concurrent
concurrent data structure
ConcurrentHashMap
Customizing
Executor
Executor framework
faq
fork
Fork/Join
fork join
Framework
Functional Programming
Guava
IO
JAVA
java8
jmm
join
JVM
lock
Memory Barriers
Netty
NIO
OAuth 2.0
pattern-matching
redis
Scala
service mesh
slf4j
spark
spark官方文档
stm
Storm
synchronization
Synchronized
thread
tomcat
volatile
多线程
并发译文,Java ,Maven
- 版权所有 © 并发编程网 – ifeve.com
- ICP号: 浙ICP备12046809号
-
浙公网安备 33010602005873号
今天发现这么一个关于并发的网站,甚是高兴,于是注册,看文章,结果就看到评论里面各种指出错误,对于初学者,这不是误导么这是?
哪些文章有各种错误?我们会改正的。
能看下 最下面我的问题吗? @transaction synchonized 方法 且单例 能不能 防止 并发访问出现的问题
有错误是好事:)
激发自己的思考能力,这样才会学的透彻 懂得更多
我看了好久了。没发现什么错误,尤其是为了说明问题精心设计的例子,非常收益。多谢。
不客气。
我看了好久了。没发现什么错误,这个主要是看思想,尤其是为了说明问题精心设计的例子,非常受益。多谢。
很好的网站,我看过几篇文章就很喜欢。加油。
有个问题,一个spring容器管理项目,一个方法会被并发访问,方法为同步方法且用@Transcation注解,数据库隔离机制为 可重复读,
业务是这样的,用户交易 后 本地会产生一条 交易流水记录,status为0, 然后调用第三方支付,第三方支付 会同步异步 回调本地 这个方法两次, 这个方法内部 先判断 status是不是为0 ,然后 账户增加10元, 那假如 同步 异步同时回调,那 会不会出现 该用户账户 增加两次金额 情况
@Transcation
public synchronized void callback() {
查询交易流水记录 status
if(status == 0) {
用户帐号 增加10元
交易流水记录 status 设为1
} else {
不作为
}
}
应该不会,同步和异步应该分属不同的线程,调用的是同一个对象的方法,那么synchronized 会加锁控制线程的进入。
同一个对象,不同线程是可以的。
这样写会出现增加两次金额的情况,例: 第一个线程获取到对象锁执行完 callback 后释放锁,此时事务还未提交,第二个线程进去后获取到的status依然是0.
这几天看了网站不少的文章,质量很高,很用心,特意注册来评论,表达感谢
谢谢