1、饿汉式 package singleton;: u) t1 F5 A8 j9 `+ U# h4 ]
/**( E t: K' S4 _- q u( \6 Z
* 饿汉式单例 w- v* E8 y' K/ _( v* S
* @author 蒋明原3 Q3 l2 L8 u9 [- k( a% U. u! n
*3 u3 l- K2 n% g( q& A0 e* ~" o
*/' P0 t9 \5 F: x c# Z j- R* k
public class HungrySingleton {
) j' G4 v7 s" I0 P7 ~* M /**jvm保证instance只被初始化一次*/
& X) b" u- }9 T+ o private static HungrySingleton instance = new HungrySingleton();8 O9 n, d( {% H* t8 }. h
/**阻止外部使用new实例化对象*/+ N% a( E, N; T" W* G( [) A
private HungrySingleton(){5 S) v" l, k0 s; r+ z% ]
}; a5 x# A5 \9 b# x* {6 ^
/**/ X! c: T" ~7 T$ T6 J
* 获取实例( }! w' w5 e/ S/ ]0 z
* @return 独一的instance
6 E) l( x7 `2 b. c */3 R W+ } F' @/ Z8 X
public static HungrySingleton getInstance() {
: c2 G$ i% i/ @3 p3 T7 K return instance;1 F& E6 n& v3 f. i3 d/ N7 o
}
4 b# c! n& o9 [! c5 e1 w$ @) E5 j: Y }2、懒汉式3 _. B) ]3 {8 Q3 f& X+ \$ c
package singleton;
' s, I& i: Q) L1 c1 \. E /**
; D- h' v! L4 I* C. ?2 L * 懒汉式单例! a) q0 |! ?8 }; h
* @author 蒋明原
' ? l2 t# }* v) ~; Z% b5 J *
- [$ y4 R/ V7 n3 ~ */% q0 ~# z: S5 K$ ^- X9 i
public class LazySingleton {+ ~1 f& g4 h) R1 C" n# v% S7 j
/**
% b% o# u7 R* J$ G * 阻止外界使用new实例化对象8 Y, n7 ~) ^. i7 |
*/
8 _5 a6 q; ]# I- k" d4 C private LazySingleton() {5 g. v- U- X% v6 `0 H3 J" s
}; `+ o; |+ H3 ^% f; W8 d, |
/**% |/ p3 M9 I t& u8 b L6 A# O
* 只有在挪用getInstance()时此类才会被装载3 B) f! ~/ E) G2 d$ \/ f, f
* 在SingletonKerriganF.java中说了然加载挨次7 f0 q6 l d! C+ l* o
*/
1 Y! j, U" N }2 |: ?7 w& Z private static class SingletonHolder {
" k' }' l8 t5 q, V# g /**
& e! U9 q! x) y4 J8 D * 对象实例,jvm保证只初始化一次
+ g) C w3 `- P; u6 x# Q4 T */1 _7 C: l1 Y; E& A) |" ]* H! ` P* t
static final LazySingleton INSTANCE = new LazySingleton();3 \5 a$ y3 Q, h( s
}# W+ e% O3 M! V5 Z7 x C
/**
" \9 j2 K& d: C4 v4 x, r * 获取实例" N2 f. \9 I2 Y$ F& z( ?# y
* @return 返回独一实例
6 u& \1 {. S: A* Z. j */
( ^) O* N3 B$ A0 F3 b: }2 [
6 I1 A6 @3 d! |2 o( C |