热门文章
- Google Guava官方教程(中文版) 1,037,342 人阅读
- Java NIO系列教程(一) Java NIO 概述 735,399 人阅读
- Java NIO 系列教程 497,721 人阅读
- Java并发性和多线程介绍目录 475,689 人阅读
- Java NIO系列教程(十二) Java NIO与IO 401,147 人阅读
- Java NIO系列教程(六) Selector 348,152 人阅读
- Java NIO系列教程(三) Buffer 347,067 人阅读
- Java NIO系列教程(二) Channel 338,884 人阅读
- 69道Spring面试题和答案 334,752 人阅读
- Java8初体验(二)Stream语法详解 309,848 人阅读
- 并发框架Disruptor译文 289,517 人阅读
- Netty 5用户指南 242,146 人阅读
- [Google Guava] 2.3-强大的集合工具类:ja... 228,901 人阅读
- [Google Guava] 3-缓存 227,446 人阅读
- 《Storm入门》中文版 225,217 人阅读
- 面试题 223,457 人阅读
- 聊聊并发(三)Java线程池的分析和使用 219,624 人阅读
- Java NIO系列教程(八) SocketChannel 211,361 人阅读
- [Google Guava] 1.1-使用和避免null 209,060 人阅读
- 如何创建并运行java线程 196,551 人阅读
近期文章
- 由JDK bug引发的线上OOM
- feign-eureka-ribbon的协作原理
- 架构师的核心能力-抽象能力
- Nginx unexpected end of file 配置证书遇到问题,如何解决?
- 资产管理数字化建设的思考
- 分布式场景下的稳定性保障
- 分布式场景下的资损防控
- 使用了lombok后如何生成正确源码包
- 聊聊动态线程池的9个场景
- java服务器调试指南
- 如何利用 RPA 实现自动化获客?
- 关于证书,这里有你想知道的一切
- k8s中部署traefik并开启https支持
- 领域事件 disruptor 使用场景之实现Spring事件驱动模型 ApplicationEvent
- MySQL驱动中关于时间的坑
- 2FA双因子认证之OTP算法
- HMAC算法
- SHA1算法详解
- Innodb之快照读原理实现
- JDK17都出来了,你还在用JDK8?
- ZIP(32位)文件格式详解
- Nacos 本地单机版部署步骤和使用
- Docker基础介绍
- Java 内存模型
- 教程:Go入门
- Java 并发之 Fork/Join 框架
- Spring Cloud 整合 Feign 的原理
- 看山聊并发:Java 中 Vector 和 SynchronizedList 的区别
- 看山聊并发:认识 Java 中的队列:Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList
- 看山聊并发:如果非要在多线程中使用 ArrayList 会发生什么?(第二篇)
分类
- Android (4)
- Architecture (4)
- C++ (14)
- CPU (2)
- Framework (74)
- akka (20)
- GO (7)
- groovy (6)
- guava (24)
- JAVA (1,079)
- JVM (50)
- linux (10)
- microservices (5)
- Netty (33)
- 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)
- 网络 (8)
- 面试 (2)
标签
actor
Basic
classes
collections
concurrency
Concurrent
concurrent data structure
ConcurrentHashMap
Customizing
Executor
Executor framework
False Sharing
faq
fork
Fork/Join
fork join
Framework
Functional Programming
Guava
IO
JAVA
java8
jmm
join
JVM
lock
Memory Barriers
Netty
NIO
pattern-matching
redis
Scala
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.
这几天看了网站不少的文章,质量很高,很用心,特意注册来评论,表达感谢
谢谢