请各位 帮我解释下 为什么 synchronized没 ReentrantReadWriteLock 的性能好

synchronized
------------------
public int getState() {
return state;
}
public synchronized void setState(int a) {
this.state = a;
}

**********************************
ReentrantReadWriteLock
-------------------------
public int getState() {
read.lock();
try {
return state;
} finally {
read.unlock();
}
}
public void setState(int a) {
write.lock();
try {
this.state = a;
} finally {
write.unlock();
}

}


在网上找好多资料 都说 ReentrantReadWriteLock 的性能比 synchronized 高?
我看不出如果是这样都一样的 我用synchronized 只锁住set方法 读取的时候 用get没有任何锁
并不影响读取

后者有使用前提,是写不频繁,读频繁,后者主要应用了并行优化,所以,在这一特殊前提下,性能要好点,但是因为多线程锁机制本身天然缺点,性能要整体差与非多线程比如scala。

get set 也是要同步的,你这个例子不明显

读写锁分离 是为了 get get 之间使不要同步

第一种方式会有并发问题
get 没加锁,写到一半可能会被读
应同时了也加上synchronized
synchronized 默任为当前对像加了一把ReentrantLock
所以 会出现一个线程读另一个线程不能进入的现像
因为只要线程进入就互斥 不论读写
ReentrantReadWriteLock 其实是加了两把锁
写锁排斥读 写
读锁只排斥 写 所以能达到并发读的效果 克服了synchronized 读互斥的缺点
所以说 ReentrantReadWriteLock 比synchronized 快
[该贴被bbo268于2010-08-26 10:24修改过]

谢谢啊 现在算是有点明白了 之前一直是转不过弯

两把锁,读还是并发的,写的时候排队