File tree Expand file tree Collapse file tree
java-multithread/src/main/java/com/brianway/learning/java/multithread/singleton/example3 Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .singleton .example3 ;
2+
3+ import java .io .Serializable ;
4+
5+ /**
6+ * Created by Brian on 2016/4/16.
7+ */
8+ public class MyObject2 implements Serializable {
9+ private static class MyObjectHandler {
10+ private static final MyObject2 myObject = new MyObject2 ();
11+ }
12+
13+ private MyObject2 (){}
14+
15+ synchronized public static MyObject2 getInstance (){
16+ return MyObjectHandler .myObject ;
17+ }
18+
19+ protected Object readResolve () {
20+ System .out .println ("调用了readResolve方法" );
21+ return MyObjectHandler .myObject ;
22+ }
23+ }
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .singleton .example3 ;
2+
3+
4+ /**
5+ * Created by Brian on 2016/4/16.
6+ */
7+ public class MyObject3 {
8+
9+ private static MyObject3 instance = null ;
10+
11+ private MyObject3 (){}
12+
13+ static {
14+ instance = new MyObject3 ();
15+ }
16+
17+ public static MyObject3 getInstance (){
18+ return instance ;
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .singleton .example3 ;
2+
3+
4+
5+ /**
6+ * Created by Brian on 2016/4/16.
7+ */
8+ public enum MyObject4 {
9+ ObjectFactory ;
10+ private Object object ;
11+ private MyObject4 (){
12+ try {
13+ Thread .sleep (3000 );//模拟初始化
14+ object = new Object ();
15+ } catch (InterruptedException e ) {
16+ e .printStackTrace ();
17+ }
18+ }
19+
20+ public Object getObject (){
21+ return object ;
22+ }
23+ }
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .singleton .example3 ;
2+
3+
4+
5+ /**
6+ * Created by Brian on 2016/4/16.
7+ */
8+ public class MyObject5 {
9+ public enum MyEnumSingleton {
10+ ObjectFactory ;
11+ private Object object ;
12+ private MyEnumSingleton (){
13+ try {
14+ Thread .sleep (3000 );//模拟初始化
15+ object = new Object ();
16+ } catch (InterruptedException e ) {
17+ e .printStackTrace ();
18+ }
19+ }
20+
21+ public Object getObject (){
22+ return object ;
23+ }
24+ }
25+
26+ public static Object getObject (){
27+ return MyEnumSingleton .ObjectFactory .getObject ();
28+ }
29+
30+ }
Original file line number Diff line number Diff line change @@ -23,7 +23,7 @@ public static void main(String[] args) {
2323
2424/*
2525输出:
26- 1802892302 com.brianway.learning.java.multithread.singleton.example3.MyObject1@65b21710
27- 1802892302 com.brianway.learning.java.multithread.singleton.example3.MyObject1@65b21710
28- 1802892302 com.brianway.learning.java.multithread.singleton.example3.MyObject1@65b21710
26+ 418579292 com.brianway.learning.java.multithread.singleton.example3.MyObject1@18f3035c
27+ 418579292 com.brianway.learning.java.multithread.singleton.example3.MyObject1@18f3035c
28+ 418579292 com.brianway.learning.java.multithread.singleton.example3.MyObject1@18f3035c
2929 */
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .singleton .example3 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/16.
5+ */
6+
7+
8+ import java .io .*;
9+
10+ /**
11+ * p273
12+ * 序列化与反序列化的单例模式实现
13+ *
14+ */
15+ public class Run3_singleton2 {
16+ public static void main (String [] args ) {
17+ try {
18+ MyObject2 myObject = MyObject2 .getInstance ();
19+ FileOutputStream fos = new FileOutputStream (new File ("myObject.txt" ));
20+ ObjectOutputStream oos = new ObjectOutputStream (fos );
21+ oos .writeObject (myObject );
22+ oos .close ();
23+ fos .close ();
24+ System .out .println (myObject .hashCode ()+" " + myObject );
25+ } catch (FileNotFoundException e ) {
26+ e .printStackTrace ();
27+ }catch (IOException e ) {
28+ e .printStackTrace ();
29+ }
30+
31+ try {
32+ FileInputStream fis = new FileInputStream (new File ("myObject.txt" ));
33+ ObjectInputStream ios = new ObjectInputStream (fis );
34+ MyObject2 myObject = (MyObject2 ) ios .readObject ();
35+ ios .close ();
36+ fis .close ();
37+ System .out .println (myObject .hashCode ()+" " + myObject );
38+ } catch (FileNotFoundException e ) {
39+ e .printStackTrace ();
40+ } catch (IOException e ){
41+ e .printStackTrace ();
42+ } catch (ClassNotFoundException e ){
43+ e .printStackTrace ();
44+ }
45+ }
46+ }
47+
48+
49+ /*
50+ 输出:
51+ 325040804 com.brianway.learning.java.multithread.singleton.example3.MyObject2@135fbaa4
52+ 1173230247 com.brianway.learning.java.multithread.singleton.example3.MyObject2@45ee12a7
53+
54+ ------------------------
55+ 取消MyObject2中protected Object readResolve()的注释
56+ 输出:
57+ 325040804 com.brianway.learning.java.multithread.singleton.example3.MyObject2@135fbaa4
58+ 调用了readResolve方法
59+ 325040804 com.brianway.learning.java.multithread.singleton.example3.MyObject2@135fbaa4
60+
61+ */
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .singleton .example3 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/16.
5+ */
6+
7+
8+ /**
9+ * p275
10+ * 使用static代码块实现单例模式
11+ */
12+ public class Run3_singleton3 {
13+ public static void main (String [] args ) {
14+ Thread3 t1 = new Thread3 ();
15+ Thread3 t2 = new Thread3 ();
16+ Thread3 t3 = new Thread3 ();
17+ t1 .start ();
18+ t2 .start ();
19+ t3 .start ();
20+ }
21+ }
22+
23+
24+ /*
25+ 输出:
26+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
27+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
28+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
29+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
30+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
31+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
32+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
33+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
34+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
35+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
36+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
37+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
38+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
39+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
40+ 974814630 com.brianway.learning.java.multithread.singleton.example3.MyObject3@3a1a7da6
41+
42+ */
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .singleton .example3 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/16.
5+ */
6+
7+
8+ /**
9+ * p276
10+ * 使用enum枚举数据类型实现单例模式
11+ */
12+ public class Run3_singleton4 {
13+ public static void main (String [] args ) {
14+ Thread4 t1 = new Thread4 ();
15+ Thread4 t2 = new Thread4 ();
16+ Thread4 t3 = new Thread4 ();
17+ t1 .start ();
18+ t2 .start ();
19+ t3 .start ();
20+ }
21+ }
22+
23+
24+ /*
25+ 输出:
26+ 61956794 java.lang.Object@3b162ba
27+ 61956794 java.lang.Object@3b162ba
28+ 61956794 java.lang.Object@3b162ba
29+ 61956794 java.lang.Object@3b162ba
30+ 61956794 java.lang.Object@3b162ba
31+ 61956794 java.lang.Object@3b162ba
32+ 61956794 java.lang.Object@3b162ba
33+ 61956794 java.lang.Object@3b162ba
34+ 61956794 java.lang.Object@3b162ba
35+ 61956794 java.lang.Object@3b162ba
36+ 61956794 java.lang.Object@3b162ba
37+ 61956794 java.lang.Object@3b162ba
38+ 61956794 java.lang.Object@3b162ba
39+ 61956794 java.lang.Object@3b162ba
40+ 61956794 java.lang.Object@3b162ba
41+
42+
43+ */
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .singleton .example3 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/16.
5+ */
6+
7+
8+ /**
9+ * p277
10+ * 使用enum枚举数据类型实现单例模式
11+ * 完善
12+ */
13+ public class Run3_singleton5 {
14+ public static void main (String [] args ) {
15+ Thread5 t1 = new Thread5 ();
16+ Thread5 t2 = new Thread5 ();
17+ Thread5 t3 = new Thread5 ();
18+ t1 .start ();
19+ t2 .start ();
20+ t3 .start ();
21+ }
22+ }
23+
24+
25+ /*
26+ 输出:
27+ 541962297 java.lang.Object@204db039
28+ 541962297 java.lang.Object@204db039
29+ 541962297 java.lang.Object@204db039
30+ 541962297 java.lang.Object@204db039
31+ 541962297 java.lang.Object@204db039
32+ 541962297 java.lang.Object@204db039
33+ 541962297 java.lang.Object@204db039
34+ 541962297 java.lang.Object@204db039
35+ 541962297 java.lang.Object@204db039
36+ 541962297 java.lang.Object@204db039
37+ 541962297 java.lang.Object@204db039
38+ 541962297 java.lang.Object@204db039
39+ 541962297 java.lang.Object@204db039
40+ 541962297 java.lang.Object@204db039
41+ 541962297 java.lang.Object@204db039
42+
43+
44+ */
Original file line number Diff line number Diff line change 88public class Thread1 extends Thread {
99 @ Override
1010 public void run () {
11- System .out .println (com . brianway . learning . java . multithread . singleton . example2 . MyObject1 .getInstance ().hashCode ()+" " + MyObject1 .getInstance ());
11+ System .out .println (MyObject1 .getInstance ().hashCode ()+" " + MyObject1 .getInstance ());
1212 }
1313}
You can’t perform that action at this time.
0 commit comments