比如如下代码,降级了并没有并发执行啊? public void put(Object data){
rwl.writeLock().lock();
rwl.readLock().lock();
System.out.println(Thread.currentThread().getName() + " be ready to write data!");
try {
Thread.sleep((long)(Math.random()*1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
this.data = data;
System.out.println(Thread.currentThread().getName() + " have write data: " + data);
rwl.readLock().unlock();
rwl.writeLock().unlock();
}输出:Thread-0 be ready to write data!Thread-0 have write data: 1103Thread-2 be ready to write data!Thread-2 have write data: 4531Thread-1 be ready to write data!Thread-1 have write data: 2188也并没有并发执行啊
2 回答

当年话下
TA贡献1890条经验 获得超9个赞
你这里3个线程都是要写数据 怎么可能会并发执行,Thread-0 调用put的时候占用了write锁,Thread-1和Thread-2都被挡在外面了;锁降级的意义是当前线程由write降为read,其他只需要read锁的线程可以去获取read锁,达到并发读的目的。
添加回答
举报
0/150
提交
取消