File tree Expand file tree Collapse file tree 24 files changed +527
-0
lines changed
java-multithread/src/main/java/com/brianway/learning/java/multithread/singleton Expand file tree Collapse file tree 24 files changed +527
-0
lines changed Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example1 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+
7
+ /**
8
+ * 缺点:不能有其他实例变量
9
+ * getInstance()方法没有同步,可能出现非线程安全问题
10
+ */
11
+ public class MyObject0 {
12
+ private static MyObject0 myObject = new MyObject0 ();
13
+
14
+ private MyObject0 (){}
15
+
16
+ public static MyObject0 getInstance (){
17
+ return myObject ;
18
+ }
19
+ }
Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example1 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+ public class MyObject1 {
7
+ private static MyObject1 myObject ;
8
+
9
+ private MyObject1 (){}
10
+
11
+ public static MyObject1 getInstance (){
12
+ //延迟加载
13
+ if (myObject == null ){
14
+ myObject = new MyObject1 ();
15
+ }
16
+ return myObject ;
17
+ }
18
+ }
Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example1 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+ public class MyObject2 {
7
+ private static MyObject2 myObject ;
8
+
9
+ private MyObject2 (){}
10
+
11
+ public static MyObject2 getInstance (){
12
+
13
+ try {
14
+ if (myObject == null ){
15
+ Thread .sleep (2000 );//模拟创建对象前的坐一些准备
16
+ myObject = new MyObject2 ();
17
+ }
18
+ } catch (InterruptedException e ) {
19
+ e .printStackTrace ();
20
+ }
21
+ return myObject ;
22
+ }
23
+ }
Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example1 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+
7
+ /**
8
+ * p262
9
+ * 立即加载/“饿汉模式”
10
+ */
11
+ public class Run1_singleton0 {
12
+ public static void main (String [] args ) {
13
+ Thread0 t1 = new Thread0 ();
14
+ Thread0 t2 = new Thread0 ();
15
+ Thread0 t3 = new Thread0 ();
16
+ t1 .start ();
17
+ t2 .start ();
18
+ t3 .start ();
19
+ }
20
+ }
21
+
22
+
23
+ /*
24
+ 输出:
25
+ 663838472 com.brianway.learning.java.multithread.singleton.example1.MyObject0@27915f08
26
+ 663838472 com.brianway.learning.java.multithread.singleton.example1.MyObject0@27915f08
27
+ 663838472 com.brianway.learning.java.multithread.singleton.example1.MyObject0@27915f08
28
+ */
Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example1 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+
7
+ /**
8
+ * p264
9
+ * 延迟加载/“懒汉模式”
10
+ * 会出问题
11
+ *
12
+ */
13
+ public class Run1_singleton1 {
14
+ public static void main (String [] args ) {
15
+ Thread1 t1 = new Thread1 ();
16
+ Thread1 t2 = new Thread1 ();
17
+ Thread1 t3 = new Thread1 ();
18
+ t1 .start ();
19
+ t2 .start ();
20
+ t3 .start ();
21
+ }
22
+ }
23
+
24
+
25
+ /*
26
+ 输出:
27
+ 541962297 com.brianway.learning.java.multithread.singleton.example1.MyObject1@3a1a7da6
28
+ 974814630 com.brianway.learning.java.multithread.singleton.example1.MyObject1@3a1a7da6
29
+ 974814630 com.brianway.learning.java.multithread.singleton.example1.MyObject1@3a1a7da6
30
+
31
+ ---------------------------
32
+
33
+ 974814630 com.brianway.learning.java.multithread.singleton.example1.MyObject1@3a1a7da6
34
+ 974814630 com.brianway.learning.java.multithread.singleton.example1.MyObject1@3a1a7da6
35
+ 974814630 com.brianway.learning.java.multithread.singleton.example1.MyObject1@3a1a7da6
36
+
37
+ --------------------------
38
+
39
+ 1802892302 com.brianway.learning.java.multithread.singleton.example1.MyObject1@6b75f40e
40
+ 974814630 com.brianway.learning.java.multithread.singleton.example1.MyObject1@6b75f40e
41
+ 1771081048 com.brianway.learning.java.multithread.singleton.example1.MyObject1@6b75f40e
42
+
43
+ */
Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example1 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+
7
+ /**
8
+ * p265
9
+ * 延迟加载/“懒汉模式”缺点展示
10
+ *
11
+ */
12
+ public class Run1_singleton2 {
13
+ public static void main (String [] args ) {
14
+ Thread2 t1 = new Thread2 ();
15
+ Thread2 t2 = new Thread2 ();
16
+ Thread2 t3 = new Thread2 ();
17
+ t1 .start ();
18
+ t2 .start ();
19
+ t3 .start ();
20
+ }
21
+ }
22
+
23
+
24
+ /*
25
+ 输出:
26
+ 1771081048 com.brianway.learning.java.multithread.singleton.example1.MyObject2@6b75f40e
27
+ 1802892302 com.brianway.learning.java.multithread.singleton.example1.MyObject2@6b75f40e
28
+ 974814630 com.brianway.learning.java.multithread.singleton.example1.MyObject2@6b75f40e
29
+
30
+ */
Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example1 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+ public class Thread0 extends Thread {
7
+ @ Override
8
+ public void run () {
9
+ System .out .println (MyObject0 .getInstance ().hashCode ()+" " +MyObject0 .getInstance ());
10
+ }
11
+ }
Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example1 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+ public class Thread1 extends Thread {
7
+ @ Override
8
+ public void run () {
9
+ System .out .println (MyObject1 .getInstance ().hashCode ()+" " +MyObject1 .getInstance ());
10
+ }
11
+ }
Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example1 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+ public class Thread2 extends Thread {
7
+ @ Override
8
+ public void run () {
9
+ System .out .println (MyObject2 .getInstance ().hashCode ()+" " +MyObject2 .getInstance ());
10
+ }
11
+ }
Original file line number Diff line number Diff line change
1
+ package com .brianway .learning .java .multithread .singleton .example2 ;
2
+
3
+ /**
4
+ * Created by Brian on 2016/4/16.
5
+ */
6
+ public class MyObject1 {
7
+ private static MyObject1 myObject ;
8
+
9
+ private MyObject1 (){}
10
+
11
+ synchronized public static MyObject1 getInstance (){
12
+
13
+ try {
14
+ if (myObject == null ){
15
+ Thread .sleep (3000 );//模拟创建对象前的坐一些准备
16
+ myObject = new MyObject1 ();
17
+ }
18
+ } catch (InterruptedException e ) {
19
+ e .printStackTrace ();
20
+ }
21
+ return myObject ;
22
+ }
23
+ }
You can’t perform that action at this time.
0 commit comments