线程安全是个伪命题。不存在线程安全这个东西。
比如你拿了100个对象做共享数据,这一百个对象的一致性就是个巨大的问题。100个对象不像数据库那么规整,它们的ACID特性如何实现。所以说要么面向对象是个伪命题要么线程安全就是个伪命题。spring, struts, hibernate托起的这个OO的环境,根本就是个虚拟物。Since根本没有事务这个东西在对象里,那么证明所谓对象根本就不存在。我们从没有在对象中保存过任何真正的数据。对象只是方法的句柄。
如果你的对象真有状态,那么我问你,你是如何维护这些状态的一致性以及对所有它们操作的原子性的?没有是吧。我不排除特殊行业的OO事实,但是通用的做法是个不成立的OO这个也是事实。
除非你把所有的对象访问用一个类装起来。
否则就全乱套了。
除非提出对象事务服务否则根本不可能解决这样的问题。
首先,基于整个数据集的“线程安全”没有。
然后,不可能对整个系统做同步。
否则就成了单线程程序。
所以我听到说线程安全就头大。
另一个问题是用户交互。
用户交互形成一个更大的“多线程”。根本不可能对这样的东西做同步与线程安全。
因为人是“锁”不住的。
对这种情况只能做乐观锁。
根本没有办法做悲观锁。
你换个角度,那么多内存数据库。它们是怎么做同步的?它们的锁机制是怎样的?
所以千万不要以为你的类“安全”你的数据就安全了。因为不存在这样的事情!直到你能对人上锁那一天为止。否则不存在真正的“线程安全”这样的东西。
我推荐对象事务。即对象性事务。所有的类都应该实现事务接口。当事务失败时才可以回滚所有错误的操作。