热门文章
- Google Guava官方教程(中文版) 880,067 人阅读
- Java NIO系列教程(一) Java NIO 概述 646,304 人阅读
- Java NIO 系列教程 430,005 人阅读
- Java并发性和多线程介绍目录 423,507 人阅读
- Java NIO系列教程(十二) Java NIO与IO 369,323 人阅读
- Java NIO系列教程(六) Selector 306,209 人阅读
- Java NIO系列教程(三) Buffer 305,810 人阅读
- Java NIO系列教程(二) Channel 300,603 人阅读
- 69道Spring面试题和答案 282,465 人阅读
- Java8初体验(二)Stream语法详解 277,185 人阅读
- 并发框架Disruptor译文 245,348 人阅读
- Netty 5用户指南 210,655 人阅读
- 《Storm入门》中文版 206,274 人阅读
- [Google Guava] 2.3-强大的集合工具类:ja... 203,195 人阅读
- [Google Guava] 3-缓存 198,223 人阅读
- 面试题 194,584 人阅读
- Java NIO系列教程(八) SocketChannel 187,910 人阅读
- 聊聊并发(三)Java线程池的分析和使用 179,266 人阅读
- 如何创建并运行java线程 179,244 人阅读
- [Google Guava] 1.1-使用和避免null 173,867 人阅读
近期文章
- Docker 教程(三):Docker 命令
- Grpc Streaming 你造?
- 《Docker 教程》(二):Dockerfile
- 《软件架构》4. CS架构
- 《Scala 教程》介绍
- 《Scala教程》 2.Scala Overview
- 《软件架构》事件驱动架构
- 《Scala教程》 3.Scala Classes
- Docker 教程(一):Docker 是什么
- 《Scala教程》翻译邀请
- 《Docker教程》翻译邀请
- 《软件架构》缓存技术
- 《软件架构》高扩展架构
- 《软件架构》RIA 架构
- 《软件架构》N 层架构
- 《软件架构》总览
- 《软件架构》单进程架构
- 《软件架构》翻译邀请
- 《Apache Log4j 2 用户指南》架构
- 如何使用java实现Open Addressing
- 一文带你彻底了解Java异步编程
- Java踩坑记系列之线程池
- Spring框架提供的异步执行能力
- 《技术人求职指南》(三) 掌握方法论
- 《技术人求职指南》(四) 实战练习
- 深入理解Java8
- Spring Boot 如何快速集成 Redis 哨兵?
- JDK里的自旋锁
- 为什么说Java程序员到了必须掌握 Spring Boot 的时候?
- 为什么我们放弃了Vue?Vue和React深度比较
分类
- Android (3)
- Architecture (4)
- C++ (13)
- CPU (2)
- Framework (74)
- akka (20)
- GO (6)
- groovy (6)
- guava (24)
- JAVA (1,042)
- JVM (50)
- linux (10)
- microservices (5)
- Netty (32)
- Python (2)
- react (6)
- redis (26)
- Scala (11)
- spark (19)
- Spring (24)
- storm (44)
- thinking (3)
- Velocity (10)
- Web (18)
- zookeeper (1)
- 公告 (5)
- 区块链 (3)
- 大数据 (35)
- 好文推荐 (37)
- 并发书籍 (97)
- 并发译文 (421)
- 感悟 (6)
- 技术问答 (12)
- 敏捷管理 (6)
- 本站原创 (91)
- 架构 (43)
- 活动 (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
slf4j
spark
spark官方文档
Spring
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.
这几天看了网站不少的文章,质量很高,很用心,特意注册来评论,表达感谢
谢谢