Skip to content

Commit b14aeba

Browse files
committed
java-multithread singleton包更新至example3,待续
1 parent e282acf commit b14aeba

24 files changed

+527
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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+
}
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.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 numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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+
*/
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}
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.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+
}

0 commit comments

Comments
 (0)