File tree Expand file tree Collapse file tree 13 files changed +338
-4
lines changed
java-multithread/src/main/java/com/brianway/learning/java/multithread/singleton/example3 Expand file tree Collapse file tree 13 files changed +338
-4
lines changed 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) {
23
23
24
24
/*
25
25
输出:
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
29
29
*/
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 8
8
public class Thread1 extends Thread {
9
9
@ Override
10
10
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 ());
12
12
}
13
13
}
You can’t perform that action at this time.
0 commit comments