1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Written by Doug Lea with assistance from members of JCP JSR-166
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Expert Group and released to the public domain, as explained at
4a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson * http://creativecommons.org/publicdomain/zero/1.0/
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.util.concurrent.atomic;
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport sun.misc.Unsafe;
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
11bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson * An {@code int} value that may be updated atomically.  See the
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link java.util.concurrent.atomic} package specification for
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * description of the properties of atomic variables. An
14bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson * {@code AtomicInteger} is used in applications such as atomically
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * incremented counters, and cannot be used as a replacement for an
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link java.lang.Integer}. However, this class does extend
17bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson * {@code Number} to allow uniform access by tools and utilities that
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * deal with numerically-based classes.
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @since 1.5
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author Doug Lea
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/
23bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilsonpublic class AtomicInteger extends Number implements java.io.Serializable {
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final long serialVersionUID = 6214790243416807050L;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // setup to use Unsafe.compareAndSwapInt for updates
27a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson    private static final Unsafe unsafe = Unsafe.getUnsafe();
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final long valueOffset;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static {
31a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson        try {
32a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson            valueOffset = unsafe.objectFieldOffset
33a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson                (AtomicInteger.class.getDeclaredField("value"));
34a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson        } catch (Exception ex) { throw new Error(ex); }
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private volatile int value;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
40bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Creates a new AtomicInteger with the given initial value.
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param initialValue the initial value
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public AtomicInteger(int initialValue) {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value = initialValue;
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
49bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Creates a new AtomicInteger with initial value {@code 0}.
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public AtomicInteger() {
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
55bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Gets the current value.
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the current value
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int get() {
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return value;
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
62bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
64bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Sets to the given value.
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param newValue the new value
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void set(int newValue) {
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        value = newValue;
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
736232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson     * Eventually sets to the given value.
746232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson     *
756232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson     * @param newValue the new value
766232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson     * @since 1.6
776232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson     */
786232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson    public final void lazySet(int newValue) {
796232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson        unsafe.putOrderedInt(this, valueOffset, newValue);
806232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson    }
816232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson
826232a5efed0ea103e35aec73206e5e03a8b82e0cJesse Wilson    /**
83bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Atomically sets to the given value and returns the old value.
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param newValue the new value
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the previous value
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int getAndSet(int newValue) {
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (;;) {
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int current = get();
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (compareAndSet(current, newValue))
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return current;
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
95bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
97bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Atomically sets the value to the given updated value
98bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * if the current value {@code ==} the expected value.
99bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     *
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param expect the expected value
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param update the new value
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return true if successful. False return indicates that
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the actual value was not equal to the expected value.
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final boolean compareAndSet(int expect, int update) {
106bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
110bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Atomically sets the value to the given updated value
111bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * if the current value {@code ==} the expected value.
112bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     *
113bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
114bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * and does not provide ordering guarantees, so is only rarely an
115bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * appropriate alternative to {@code compareAndSet}.
116bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     *
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param expect the expected value
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param update the new value
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return true if successful.
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final boolean weakCompareAndSet(int expect, int update) {
122bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
126bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Atomically increments by one the current value.
127bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     *
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the previous value
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int getAndIncrement() {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (;;) {
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int current = get();
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int next = current + 1;
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (compareAndSet(current, next))
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return current;
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
138bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
140bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Atomically decrements by one the current value.
141bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     *
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the previous value
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int getAndDecrement() {
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (;;) {
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int current = get();
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int next = current - 1;
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (compareAndSet(current, next))
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return current;
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
152bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
154bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Atomically adds the given value to the current value.
155bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     *
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param delta the value to add
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the previous value
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int getAndAdd(int delta) {
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (;;) {
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int current = get();
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int next = current + delta;
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (compareAndSet(current, next))
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return current;
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
169bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Atomically increments by one the current value.
170bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     *
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the updated value
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int incrementAndGet() {
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (;;) {
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int current = get();
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int next = current + 1;
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (compareAndSet(current, next))
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return next;
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
181bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
183bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Atomically decrements by one the current value.
184bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     *
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the updated value
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int decrementAndGet() {
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (;;) {
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int current = get();
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int next = current - 1;
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (compareAndSet(current, next))
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return next;
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
195bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
197bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     * Atomically adds the given value to the current value.
198bba8d1acd6dfff06c94d761c67a30154ca5ca5dfJesse Wilson     *
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param delta the value to add
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the updated value
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int addAndGet(int delta) {
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (;;) {
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int current = get();
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int next = current + delta;
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (compareAndSet(current, next))
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return next;
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the String representation of the current value.
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the String representation of the current value.
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String toString() {
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return Integer.toString(get());
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
220a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson    /**
221a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     * Returns the value of this {@code AtomicInteger} as an {@code int}.
222a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     */
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int intValue() {
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return get();
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
227a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson    /**
228a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     * Returns the value of this {@code AtomicInteger} as a {@code long}
229a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     * after a widening primitive conversion.
230a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     */
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public long longValue() {
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return (long)get();
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
235a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson    /**
236a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     * Returns the value of this {@code AtomicInteger} as a {@code float}
237a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     * after a widening primitive conversion.
238a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     */
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public float floatValue() {
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return (float)get();
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
243a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson    /**
244a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     * Returns the value of this {@code AtomicInteger} as a {@code double}
245a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     * after a widening primitive conversion.
246a807b4d808d2591894daf13aab179b2e9c46a2f5Jesse Wilson     */
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public double doubleValue() {
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return (double)get();
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
252