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