百思不得其解

05-01-05 mac
读过jive2.6,有个问题一直百思不得其解,想请诸位帮忙解答:在dbforummessage.java , dbforumthread.java 等原码中多次出现带有同步关键字的方法,如:

private synchronized void saveToDb() {。。。。
private synchronized void deletePropertyFromDb(String name) {...
等db操作,当从多线程同步的角度来看,我觉得没有同步的必要,因为很多这样的方法并没有修改对象的成员变量,如saveToDb() 。

请请诸位帮忙解答一下,最好帮忙举个反例,比如去掉synchronized,在某些情况下,会出现怎样的问题, 多谢了!!

希望这个论坛越办越好

mac
2005-01-05 19:57
banq曾经有如下回复:
>没有修改对象的成员变量
但是修改了共享的数据库数据啊,看来你没有意识到数据库是共享的数据,需要同步锁定修改,这涉及到数据库的ACID。


可我还是不明白,恳请举例明示,先谢过了!!!

zrq
2005-01-08 11:59
let me answer your questions. Yes, you are right, if no instance varible is used in a method, it is a thread safe method, it need't to be synchronized.
If you need to change/read/delete the data in database, it should be isolated by the database transaction not by java code.