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并发 -- 面向对象」获取最佳阅读体验并参与讨论