File tree Expand file tree Collapse file tree 1 file changed +32
-28
lines changed
Expand file tree Collapse file tree 1 file changed +32
-28
lines changed Original file line number Diff line number Diff line change @@ -84,21 +84,24 @@ Java 中可以使用 `volatile` 来保证顺序性,`synchronize 和 lock` 也
8484可以用 ` volatile ` 实现一个双重检查锁的单例模式:
8585
8686``` java
87- public class Singleton {
88- private static volatile Singleton singleton ;
89- private Singleton (){}
90- public static Singleton getInstance (){
91- if (singleton == null ){
92- synchronize(Singleton . class){
93- if (singleton == null ){
94- singleton = new Singleton ();
95- }
96- }
97- }
98- return singleton ;
99- }
100-
101- }
87+ public class Singleton {
88+ private static volatile Singleton singleton;
89+
90+ private Singleton () {
91+ }
92+
93+ public static Singleton getInstance () {
94+ if (singleton == null ) {
95+ synchronized (Singleton . class) {
96+ if (singleton == null ) {
97+ singleton = new Singleton ();
98+ }
99+ }
100+ }
101+ return singleton;
102+ }
103+
104+ }
102105```
103106
104107这里的 ` volatile ` 关键字主要是为了防止指令重排。
@@ -108,23 +111,24 @@ public class Singleton{
108111- 初始化对象。(2)
109112- 将 ` singleton ` 对象指向分配的内存地址。(3)
110113
111- 加上 ` volatile ` 是为了让以上的三步操作顺序执行,反之有可能第二步在第三步之前被执行就有可能某个线程拿到的单例对象是还没有初始化的,以致于报错 。
114+ 加上 ` volatile ` 是为了让以上的三步操作顺序执行,反之有可能第三步在第二步之前被执行就有可能导致某个线程拿到的单例对象还没有初始化,以致于使用报错 。
112115
113116#### 控制停止线程的标记
114117
115118``` java
116- private volatile boolean flag ;
117- private void run(){
118- new Thread (new Runnable (){
119- if (flag ){
120- doSomeThing();
121- }
122- });
123- }
124-
125- private void stop(){
126- flag = false ;
127- }
119+ private volatile boolean flag ;
120+ private void run(){
121+ new Thread (new Runnable () {
122+ @Override
123+ public void run () {
124+ doSomeThing();
125+ }
126+ });
127+ }
128+
129+ private void stop(){
130+ flag = false ;
131+ }
128132```
129133
130134这里如果没有用 volatile 来修饰 flag ,就有可能其中一个线程调用了 ` stop() ` 方法修改了 flag 的值并不会立即刷新到主内存中,导致这个循环并不会立即停止。
You can’t perform that action at this time.
0 commit comments