本帖最后由 dm520 于 2009-10-06 23:44:23 编辑

解决方案 »

  1.   

    没用过
    参考下http://www.diybl.com/course/3_program/java/javashl/20071129/89472.html
      

  2.   

    你用2个lock分别锁住read和write方法 其实就等于没有上锁
    真正应该去lock的应该是你读和写的那个[资源]
      

  3.   

    怎么相当于没上锁呢,读写锁是不算是互斥锁,只是写独占的锁,当写的时候就不能在进行写和读,但是当写锁释放的时候,读的时候可以有多个线程共享的读
    LZ的程序的意思就是当调用write的时候就不能在调用read,但是写锁释放的情况下,可以多个线程共享的调用read,不存在并发问题。
    LZ你所说的没有锁住是什么情况啊,是在写的时候,可以读吗??
      

  4.   


    我看了官方的api也是这样写的,因为这两个锁是 ReentrantReadWriteLock rwl 对象生成的,应该是属于一个锁。
      

  5.   


    哎呀 夹资源和夹方法都是夹嘛  哈哈哈  但是lock肯定要是一个的对吧?
    public class JsonUtil {
        private static final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
        private static final Lock lock = ReadWriteLock();
       // private static final Lock wLock = rwl.writeLock();
            
           public static void read(){
                  try{
                       lock.readlock();
                       读的一些操作。。               } finally {
               lock.readUnlock();
               }
           }       public static void write(){
                  try{
                       lock.writelock();
                       写的一些操作。。               } finally {
               lock.writeUnlock();
               }
           }
    我没有试过 但是应该这样就sync了
      

  6.   

    额 楼主你试试不用 rlock=rwl.readlock;和 wlock=rwl.writelock; 就直接用rwl.readlock.lock();和rwl.writelock.lock();
    我觉得原因可能是因为你定义了两个新锁而这两个锁之间没有关联。
    个人认为读写锁锁的并不是代码或者对象或者数据缓存神马的,本质应该是锁住得到锁的权利。就是当一个线程锁上了写锁那么其它线程在调用这个锁时就需要等待直到那个线程的写锁被打开才能让后面的线程上锁。读锁的话 就是当一个线程上了读锁 其它线程也可以上读锁直到所有的读锁都被打开也就是count=0的时候另外的线程才能上写锁。