上一节提到了Lock代替synchronized关键字。Lock可以读写分离,读可以是并行的,但是一旦写操作进来后,读就不能并行,写只能是串行,就是同一个时间点只能有一个线程操作。
public class Product { private double price1; private double price2; private ReadWriteLock lock ; public Product() { price1 = 1.0; price2 = 2.0; lock = new ReentrantReadWriteLock(); } public double getPrice1() { lock.readLock().lock(); double price = price1; lock.readLock().unlock(); return price; } public double getPrice2() { lock.readLock().lock(); double price = price2; lock.readLock().unlock(); return price; } public void setPrices(double price1,double price2) { lock.writeLock().lock(); this.price1 = price1; this.price2 = price2; lock.writeLock().unlock(); } }