- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564679 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174627
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
AtomicInteger类
6 y7 k- U6 q8 q8 ?3 o
% ` S) w; I, J# v2 O5 ~这一讲,主要讲讲AtomicInteger类,此类同样是Number的子类,同时实现 Serializable。: J$ j9 G) s! R" c+ X/ x# }7 q! [
6 E2 h1 F! i3 y
重点内容$ J. }3 z& |/ J8 b7 {4 X4 \
4 P" K& Z7 d4 b8 H3 K& k
属性:
% u% |0 X1 A+ g! a+ S9 k$ Yprivate static final Unsafe unsafe = Unsafe.getUnsafe();3 M, }, L1 b3 ]9 ]' H, W
t1 w, y i4 v! v- } _& ]
private static final long valueOffset;
4 J% f: ?* M! f! n- F: s( G4 F I3 U. y
private volatile int value;
" t" a7 Q! {3 h3 J0 F' j# r' I( L1 K
静态代码块:
6 k) j/ e6 ?* Q# H+ G: tstatic {
4 O1 Z& d, w" E+ k try {3 l$ O+ m2 ^( a' p6 }5 i5 Z F
valueOffset = unsafe.objectFieldOffset
% g! h) a5 q" x: |8 X (AtomicInteger.class.getDeclaredField("value"));
! O, k+ t: K: N& I8 F } catch (Exception ex) { throw new Error(ex); }3 s# s6 x" Y) n
}
# E, l7 b9 I( f: [0 O. q1 c2 R) v# B---------------------
q6 P2 `/ Y5 c8 F5 B7 M# p构造方法
/ `( e# K# w" U& O upublic AtomicInteger() {% a& e) l$ e" { y- @$ Q4 d) V( ?$ p
}
4 \; ?# I: }- h0 i" I
7 t; d" R9 G" O# Spublic AtomicInteger(int initialValue) {% i! x7 x N; }2 A( W7 r
value = initialValue;# n# @6 E7 w9 L6 m, _! C
}
Q. {$ Q. ` o
$ y- p+ c, V; ^& n& y7 b! l对象方法:
5 b0 C; y5 t* Q" U2 p" A public final int get() {, c+ P8 G2 O& M$ b* |( j. U6 m+ U" f
return value;4 G3 I6 g% I! X. O( ^/ k
}
5 m+ t; D$ J& o0 T7 c! U: ?( |0 X% c+ `" ~! O
1 _1 [2 d! ?$ a5 W7 F/ V; u
public final void set(int newValue) {4 h/ g- q& L5 Y" S8 x4 ], g
value = newValue;
1 W/ Y- ^- y# p3 k& K1 y }; b% r2 K6 |- ^
9 x5 _3 y2 T4 k; d, O, S
1 x- Y3 F/ E! y3 jpublic final void lazySet(int newValue) {- J G, J( m% h# n9 y
unsafe.putOrderedInt(this, valueOffset, newValue);
! ?9 I8 z6 a9 W }
4 i! g+ |1 }; j! }1 Y+ {1 D/ B" o% v [2 ]- Y! r v# z
6 r8 ]5 ~0 Q' B3 w5 z) H3 h
public final int getAndSet(int newValue) {
# p+ X, n8 m7 N h& w0 i" n for (;;) {
/ e: Y' v4 v0 m* g- x# z int current = get();
5 s# Y- r2 p0 b% \0 R3 C if (compareAndSet(current, newValue))
. p* u8 q J) } return current;6 h" {! H' T* ?, g& x) t% C
}7 f) J4 |6 ^7 `/ S4 C
}
( S; O+ F- R/ q8 A2 B
# f& V! Q3 i7 ?) ~7 ?9 r- X) U4 }7 L& x* w+ m3 y& d! l
public final boolean compareAndSet(int expect, int update) {3 }& g/ K8 J5 d' r: g! g5 t# X4 n$ {: J
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);/ I# ~3 ?* v& Z# D
}
1 A t X- z8 s" e1 b* ]2 y
3 D: c T/ x6 N( G- `! u H+ ~& e$ F4 x& M
public final boolean weakCompareAndSet(int expect, int update) {, E8 |* m8 n. P4 j) Q# n
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);, f& m0 }( b; S, q/ X& U' D' H0 K
}" m4 S0 `! _ Q5 O J9 P: j( N" w
# r, E, A% L8 _) b2 B5 ?public final int getAndIncrement() {4 O; O7 O0 q3 S* c7 X
for (;;) {2 v- a9 p z; I- i' W! c" V4 A7 b
int current = get();
; y8 A: e! z9 ~5 m int next = current + 1;" {% v, ?% {7 I) T& \9 ]
if (compareAndSet(current, next))
! w; W* I+ V! _# D! k6 y/ E return current;0 i7 ]6 _2 ~( U4 j
}
) y8 Y( e3 B) @& l }4 k; z. t/ X. F* l: J7 u9 ?8 [
: t4 J: e7 o7 Z: I
public final int getAndDecrement() {3 V; b" W0 v( m$ x% H
for (;;) {* ~) \7 c& {/ N
int current = get();
. {0 S2 g; `! V$ Y- n" E, Z/ _ int next = current - 1;5 d& F5 ~4 ^! @$ e5 I
if (compareAndSet(current, next))
0 \% o7 |) V o6 Z- x( X) G return current;
; n0 V( K4 y! h& L }+ K! E. h7 J0 I2 K% l& w
}
0 T( q4 x4 ]3 N: B1 v, U
; c) Z& A5 D* {9 F. S0 ^
' c3 L- W$ ~7 M- e* Z' C4 apublic final int getAndAdd(int delta) {
! q) G4 i& ^# ? \( ?3 f: i for (;;) {
7 X ^" p. U/ d- S int current = get();
' U- A& b0 g/ O1 }! y9 s; L int next = current + delta;( r8 ?* E/ F6 Q. P* P4 z+ X
if (compareAndSet(current, next))
8 h! P( [& Q* ^2 V# r return current;
8 U3 k, y7 [) L& ~ }# S6 O k" ~$ h
}
8 S4 X- U! N6 A6 }- H: c- Y6 o, i* B5 |/ b; W# } T
; {8 b/ n7 |/ J6 |* z3 Z* i5 Opublic final int incrementAndGet() {1 U E) S) v2 K0 F) X% d1 }
for (;;) {
2 b0 Q+ H" Z- |, K4 C( |: K1 r* E int current = get();
! F$ E5 E7 x5 Y int next = current + 1;
% l) X1 X M. [4 _6 P% P/ i! ]& B3 V if (compareAndSet(current, next))6 B3 ~. q v! L5 G) i9 [# R
return next;
# u( w G' i0 b; @2 P7 a& i# y }) [- U& X3 m) Z0 m" i
}
& A& e& \2 L" x5 D4 ^6 _$ ~5 C0 z, i
1 k( M' K+ ]" t3 R& `8 S& J2 ?/ |
public final int decrementAndGet() {
1 z; y" `& P8 G" B/ o' G- c* c for (;;) {; x3 j; A' x- d8 M# Y
int current = get(); R* d+ L, ~+ Z4 H( p
int next = current - 1;
' [! N1 H3 ~8 E/ `! b1 E if (compareAndSet(current, next))1 }$ G; m6 X% J0 Y4 |: Z
return next;
4 D& P H1 ?/ |: a1 F }& ?4 O8 {; i7 ~
}5 A R+ I8 V5 p; ?
; u" L: \0 A' R7 c" \& K8 t4 `+ d
& H4 z/ T* e9 D% H: y" mpublic final int addAndGet(int delta) {0 Y: F6 T! ~! C6 F
for (;;) {
6 e/ j9 _, `6 P& } int current = get();. n! d! S$ Z: ^* h5 h- C
int next = current + delta;
" ^* P8 \2 d0 v8 B9 {9 F2 W if (compareAndSet(current, next)). [& J7 W: g( C8 ?1 b+ G/ L
return next;" p& Y2 H) u5 E, ]7 Y4 x
}7 N& y8 N* q/ i( @6 @* ?
}
/ v/ I) \2 m# e3 _" l+ X3 D- |; B+ u, A* W$ X
0 p' j3 z" Q6 K( ]public String toString() {8 Z; _5 o3 J+ J# P) o* E
return Integer.toString(get());
8 `7 |. h+ M$ K }: @: Z4 e9 J+ D$ q. d
1 M* V W3 J+ `. c' X+ K( j) k8 e6 P; a$ |& l7 y
public int intValue() {0 l: c/ ]8 ~9 _
return get();: U% s, ~4 ~+ ^% O* p7 V
}
* q: Z1 ]3 B5 _) X( \7 L0 A9 P+ p( [& V; s- A: W
- i$ M4 n( d+ `$ ~public long longValue() {
8 _4 T4 ~, Q g return (long)get();
4 P2 w- M9 T6 _% ^ }
# C0 @; A) ~4 i* E+ ]% P
1 B" d/ Y+ Q o0 {7 L9 q3 n1 V' t/ ]& G3 j5 K# S
public float floatValue() {
- \! I3 Q6 m8 Z2 _. O2 d& U return (float)get(); {* G$ { K* t7 _
}
" u- _0 f4 w- i6 z; v5 }$ V' Q, W
& m+ f$ B+ F% ]" T/ S( y A8 d
: u* Q7 L) v6 j* X; mpublic double doubleValue() {% i K' a1 @ O2 P% ? f
return (double)get();; |: T' q1 Q. f$ g* m( _
}2 @" @& }- D1 K6 G! |* u9 y3 W
---------------------
u" |9 O" J! W6 f, p0 O+ S作者:feyshine 5 r- m' z! u* q
来源:CSDN : E6 r0 |' t) z
+ n* g( y N, t9 k5 ]2 {* [
1 ~' N! u7 T; v8 C$ R" `
! n5 T. G' f! [5 W
( r0 b: S! |( ~$ q. X5 ]
; A; E9 R0 a( z7 Z' b |
zan
|