同步的疑惑,jive真的实现同步了么?

    
hgwnet
04-07-23 3 21

synchronized关键词一般用于虚拟锁,锁住的不是方法或代码,而是调用这个方法的对象。例如,对于一个构造函数Test(int n),由于变量n的不同,可以构造出不同的Test对象a和b,如果a、b同时访问同步区域,结果只会使synchronized形同虚设!
a和b如果要同时访问同步方法,只有该同步方法为static时才能达到同步的目的,否则,a调用a的方法,b调用b的方法,即使方法声明为同步的,但在不同对象域中它们根本达不到同步的目的。

-------------------
看了上面某个java高手的论述,联想到jive中许多数据库操作类如DbFourm()中的同步方法,不禁汗颜:DbForumfactory就不说了,是单一实例,而DbForum呢,它们真的都实现同不了么?

banq
2004-07-30 12:32

这个观点是对的,Jive中的同步可能是假的,需要具体打开代码研究。

wm_creat
2004-09-24 13:43

大错误啊,你把访问同步数据的代码写在一个单独的类里,并注明该方法为同步的,这样a,b等线程使用该类的同一个实例调用该方法就是同步的了,
如果你使用该类不同实例则该方法还必须标志为static才行,还有很多实现同步的方式,重要的是要理解线程的资源到底是怎么回事,多看看操作系统原理,比到处看那些所谓高手的线程实例好的多。

anonymous
2004-10-12 13:43

我不明白这是在讨论什么。Java代码同步有什么用?如果没有transaction infrastructure的保护,你Java代码操作数据库的过程中我把数据库修改了,你能怎么办?J2EE应用99.9%的时候根本不需要代码级的同步,你只要把业务对象写成thread unaware的immutable对象就行了。如果J2EE代码还要考虑线程,我们还要应用服务器来干吗呢?