Skip to content

Commit 4b015b5

Browse files
committed
java-multithread singleton包更新至example3,告一段落
1 parent b14aeba commit 4b015b5

File tree

13 files changed

+338
-4
lines changed

13 files changed

+338
-4
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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+
}

java-multithread/src/main/java/com/brianway/learning/java/multithread/singleton/example3/Run3_singleton1.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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+
*/

java-multithread/src/main/java/com/brianway/learning/java/multithread/singleton/example3/Thread1.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
public 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
}

0 commit comments

Comments
 (0)