value为 共享变量 ,作为Counter的 实例属性 ,将get()和addOne()声明为 synchronized方法 ,Counter就是一个 线程安全 的类
public class Counter { private long value; public synchronized long get() { return value; } public synchronized long addOne() { return ++value; } }
下面代码忽略了约束条件:即库存下限要 小于 库存上限
public class SafeWM { // 库存下限 private final AtomicLong lower = new AtomicLong(0); // 库存上限 private final AtomicLong upper = new AtomicLong(0); // 设置库存下限 public void setLower(long v) { lower.set(v); } // 设置库存上限 public void setUpper(long v) { upper.set(v); } }
public class SafeWM { // 库存下限 private final AtomicLong lower = new AtomicLong(0); // 库存上限 private final AtomicLong upper = new AtomicLong(0); // 设置库存下限 public void setLower(long v) { // 检验参数合法性 if (v > upper.get()) { throw new IllegalArgumentException(); } lower.set(v); } // 设置库存上限 public void setUpper(long v) { // 检验参数合法性 if (v < lower.get()) { throw new IllegalArgumentException(); } upper.set(v); } }
public class SafeWM { // 库存下限 private final AtomicLong lower = new AtomicLong(0); // 库存上限 private final AtomicLong upper = new AtomicLong(0); // 设置库存下限 public synchronized void setLower(long v) { // 检验参数合法性 if (v > upper.get()) { throw new IllegalArgumentException(); } lower.set(v); } // 设置库存上限 public synchronized void setUpper(long v) { // 检验参数合法性 if (v < lower.get()) { throw new IllegalArgumentException(); } upper.set(v); } }
转载请注明出处:http://zhongmingmao.me/2019/05/01/java-concurrent-object-oriented/
访问原文「Java并发 -- 面向对象」获取最佳阅读体验并参与讨论