File tree Expand file tree Collapse file tree
java-multithread/src/main/java/com/brianway/learning/java/multithread/singleton Expand file tree Collapse file tree 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