⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 casnumberrange.java

📁 java concurrency in practice 源码. JAVA并发设计
💻 JAVA
字号:
package net.jcip.examples;import java.util.concurrent.atomic.*;import net.jcip.annotations.*;/** * CasNumberRange * <p/> * Preserving multivariable invariants using CAS * * @author Brian Goetz and Tim Peierls */@ThreadSafe        public class CasNumberRange {    @Immutable            private static class IntPair {        // INVARIANT: lower <= upper        final int lower;        final int upper;        public IntPair(int lower, int upper) {            this.lower = lower;            this.upper = upper;        }    }    private final AtomicReference<IntPair> values =            new AtomicReference<IntPair>(new IntPair(0, 0));    public int getLower() {        return values.get().lower;    }    public int getUpper() {        return values.get().upper;    }    public void setLower(int i) {        while (true) {            IntPair oldv = values.get();            if (i > oldv.upper)                throw new IllegalArgumentException("Can't set lower to " + i + " > upper");            IntPair newv = new IntPair(i, oldv.upper);            if (values.compareAndSet(oldv, newv))                return;        }    }    public void setUpper(int i) {        while (true) {            IntPair oldv = values.get();            if (i < oldv.lower)                throw new IllegalArgumentException("Can't set upper to " + i + " < lower");            IntPair newv = new IntPair(oldv.lower, i);            if (values.compareAndSet(oldv, newv))                return;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -