Discuss / Java / 读锁无法被多个线程同时获取

读锁无法被多个线程同时获取

Topic source
@Test
public  void testReadFirst() throws InterruptedException {
    Counter counter = new Counter();    
 new Thread(()->{ System.out.println(Arrays.toString(counter.get()));}).run();    

new Thread(()->{System.out.println(Arrays.toString(counter.get()));    }).run();    

new Thread(()->{System.out.println(Arrays.toString(counter.get()));    }).run();    


new Thread(()->{    counter.inc(1);    }).run();}

public int[] get()  {
        rlock.lock(); // 加读锁    
        try {
          System.out.println("reading...");
          try {
              Thread.sleep(1000);        
          } catch (InterruptedException e) {
            e.printStackTrace();        }
        return Arrays.copyOf(counts, counts.length);    
        } finally {
        rlock.unlock(); // 释放读锁    
      }
}

起了三个线程去读取,下面这行代码是Thread.sleep(1000);后才会执行下一线程,这是不是说明读锁无法被多个线程同时获取?

          System.out.println("reading...");

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

说明你的rlock变量不是读锁

我多线程写错了

应该是

new Thread(()->{ 
System.out.println(Arrays.toString(counter.get()));
}).start();

调用Thread的run方法只是串行的在main线程里执行而已

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

新手编程第一条:不要轻易怀疑JDK有问题,始终坚信是自己的问题


  • 1

Reply