事务与线程安全

线程安全是个伪命题。不存在线程安全这个东西。

比如你拿了100个对象做共享数据,这一百个对象的一致性就是个巨大的问题。100个对象不像数据库那么规整,它们的ACID特性如何实现。所以说要么面向对象是个伪命题要么线程安全就是个伪命题。spring, struts, hibernate托起的这个OO的环境,根本就是个虚拟物。Since根本没有事务这个东西在对象里,那么证明所谓对象根本就不存在。我们从没有在对象中保存过任何真正的数据。对象只是方法的句柄。

如果你的对象真有状态,那么我问你,你是如何维护这些状态的一致性以及对所有它们操作的原子性的?没有是吧。我不排除特殊行业的OO事实,但是通用的做法是个不成立的OO这个也是事实。

除非你把所有的对象访问用一个类装起来。

否则就全乱套了。

除非提出对象事务服务否则根本不可能解决这样的问题。

首先,基于整个数据集的“线程安全”没有。

然后,不可能对整个系统做同步。

否则就成了单线程程序。

所以我听到说线程安全就头大。

另一个问题是用户交互。

用户交互形成一个更大的“多线程”。根本不可能对这样的东西做同步与线程安全。

因为人是“锁”不住的。

对这种情况只能做乐观锁。

根本没有办法做悲观锁。

你换个角度,那么多内存数据库。它们是怎么做同步的?它们的锁机制是怎样的?

所以千万不要以为你的类“安全”你的数据就安全了。因为不存在这样的事情!直到你能对人上锁那一天为止。否则不存在真正的“线程安全”这样的东西。

我推荐对象事务。即对象性事务。所有的类都应该实现事务接口。当事务失败时才可以回滚所有错误的操作。


转载于:https://my.oschina.net/digerl/blog/213517

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值