File tree Expand file tree Collapse file tree
java-multithread/src/main/java/com/brianway/learning/java/multithread/synchronize Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .synchronize .example15 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/13.
5+ */
6+
7+ /**
8+ * P130
9+ * sychronized代码块有volatile同步的功能
10+ */
11+ public class Run15_synchronized {
12+ public static void main (String [] args ) {
13+ try {
14+ RunThread2 t = new RunThread2 ();
15+ t .start ();
16+ Thread .sleep (1000 );
17+ t .setRunning (false );
18+ System .out .println ("已经赋值为false" );
19+ } catch (InterruptedException e ) {
20+ e .printStackTrace ();
21+ }
22+ }
23+ }
24+
25+
26+ /*
27+ 输出:
28+ 进入run了
29+ 线程被停止了
30+ 已经赋值为false
31+
32+ -----------------
33+ 注释掉RunThread2类中的synchronized ("any thing"){}
34+ 输出:
35+ 进入run了
36+ 已经赋值为false
37+
38+ */
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .synchronize .example15 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/13.
5+ */
6+
7+ /**
8+ * P121
9+ * 不使用volatile关键字
10+ * JVM配置 -server(IDEA15.02,jdk1.8,WIN7,64bit不加效果也是的)
11+ */
12+ public class Run15_volatile {
13+ public static void main (String [] args ) {
14+ try {
15+ RunThread t = new RunThread ();
16+ t .start ();
17+ Thread .sleep (1000 );
18+ t .setRunning (false );
19+ System .out .println ("已经赋值为false" );
20+ } catch (InterruptedException e ) {
21+ e .printStackTrace ();
22+ }
23+ }
24+ }
25+
26+
27+ /*
28+ 输出:
29+ 进入run了
30+ 已经赋值为false
31+
32+ --------------
33+ 加上volatile关键字后
34+ 输出:
35+ 进入run了
36+ 已经赋值为false
37+ 线程被停止了
38+ */
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .synchronize .example15 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/13.
5+ */
6+ public class RunThread extends Thread {
7+ private boolean isRunning = true ;
8+ //volatile private boolean isRunning = true;
9+
10+ public boolean isRunning (){
11+ return isRunning ;
12+ }
13+
14+ public void setRunning (boolean running ) {
15+ isRunning = running ;
16+ }
17+
18+ @ Override
19+ public void run () {
20+ System .out .println ("进入run了" );
21+ while (isRunning == true ){
22+
23+ }
24+ System .out .println ("线程被停止了" );
25+ }
26+ }
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .synchronize .example15 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/13.
5+ */
6+ public class RunThread2 extends Thread {
7+ private boolean isRunning = true ;
8+
9+ public boolean isRunning (){
10+ return isRunning ;
11+ }
12+
13+ public void setRunning (boolean running ) {
14+ isRunning = running ;
15+ }
16+
17+ @ Override
18+ public void run () {
19+ System .out .println ("进入run了" );
20+ while (isRunning == true ){
21+ synchronized ("any thing" ){}
22+ }
23+ System .out .println ("线程被停止了" );
24+ }
25+ }
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .synchronize .example16 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/13.
5+ */
6+ public class MyThread extends Thread {
7+ volatile public static int count ;
8+ //synchronized
9+ private static void addCount (){
10+ for (int i =0 ;i <100 ;i ++) {
11+ count ++;
12+ }
13+ System .out .println ("count=" +count );
14+ }
15+
16+ @ Override
17+ public void run () {
18+ addCount ();
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ package com .brianway .learning .java .multithread .synchronize .example16 ;
2+
3+ /**
4+ * Created by Brian on 2016/4/13.
5+ */
6+
7+ /**
8+ * P124
9+ * volatile非原子的特性
10+ */
11+ public class Run16_volatile {
12+ public static void main (String [] args ) {
13+ MyThread [] myThreads = new MyThread [100 ];
14+ for (int i =0 ;i <100 ;i ++){
15+ myThreads [i ]= new MyThread ();
16+ }
17+ for (int i =0 ;i <100 ;i ++){
18+ myThreads [i ].start ();
19+ }
20+
21+ }
22+ }
23+
24+ /*
25+ addCount不加synchronized
26+ 输出:
27+ count=200
28+ count=200
29+ count=300
30+ count=400
31+ count=500
32+ count=600
33+ count=700
34+ count=800
35+ count=900
36+ count=1000
37+ count=1100
38+ count=1200
39+ count=1300
40+ count=1400
41+ count=1500
42+ count=1600
43+ count=1700
44+ count=1800
45+ count=1900
46+ count=2000
47+ count=2100
48+ count=2200
49+ count=2300
50+ count=2400
51+ count=2500
52+ count=2600
53+ count=2700
54+ count=2800
55+ count=2900
56+ count=3000
57+ count=3100
58+ count=3200
59+ count=3300
60+ count=3400
61+ count=3500
62+ count=3600
63+ count=3700
64+ count=3800
65+ count=3900
66+ count=4000
67+ count=4100
68+ count=4200
69+ count=4300
70+ count=4400
71+ count=4500
72+ count=9456
73+ count=9456
74+ count=9456
75+ count=9456
76+ count=9456
77+ count=9456
78+ count=9456
79+ count=9456
80+ count=9456
81+ count=9456
82+ count=9456
83+ count=9456
84+ count=9456
85+ count=9456
86+ count=9456
87+ count=9556
88+ count=9456
89+ count=9656
90+ count=9756
91+ count=9756
92+ count=9756
93+ count=9856
94+ count=9456
95+ count=9456
96+ count=9456
97+ count=9456
98+ count=9856
99+ count=9856
100+ count=9856
101+ count=9856
102+ count=9856
103+ count=9856
104+ count=9856
105+ count=9856
106+ count=9856
107+ count=9856
108+ count=9856
109+ count=9856
110+ count=9856
111+ count=9756
112+ count=9756
113+ count=9656
114+ count=9556
115+ count=9556
116+ count=9956
117+ count=9856
118+ count=9856
119+ count=9856
120+ count=9856
121+ count=9856
122+ count=9856
123+ count=9856
124+ count=9856
125+ count=9856
126+ count=9856
127+
128+
129+ -----------------------------
130+ addCount()加synchronized
131+ 输出:
132+ count=100
133+ count=200
134+ count=300
135+ count=400
136+ count=500
137+ count=600
138+ count=700
139+ count=800
140+ count=900
141+ count=1000
142+ count=1100
143+ count=1200
144+ count=1300
145+ count=1400
146+ count=1500
147+ count=1600
148+ count=1700
149+ count=1800
150+ count=1900
151+ count=2000
152+ count=2100
153+ count=2200
154+ count=2300
155+ count=2400
156+ count=2500
157+ count=2600
158+ count=2700
159+ count=2800
160+ count=2900
161+ count=3000
162+ count=3100
163+ count=3200
164+ count=3300
165+ count=3400
166+ count=3500
167+ count=3600
168+ count=3700
169+ count=3800
170+ count=3900
171+ count=4000
172+ count=4100
173+ count=4200
174+ count=4300
175+ count=4400
176+ count=4500
177+ count=4600
178+ count=4700
179+ count=4800
180+ count=4900
181+ count=5000
182+ count=5100
183+ count=5200
184+ count=5300
185+ count=5400
186+ count=5500
187+ count=5600
188+ count=5700
189+ count=5800
190+ count=5900
191+ count=6000
192+ count=6100
193+ count=6200
194+ count=6300
195+ count=6400
196+ count=6500
197+ count=6600
198+ count=6700
199+ count=6800
200+ count=6900
201+ count=7000
202+ count=7100
203+ count=7200
204+ count=7300
205+ count=7400
206+ count=7500
207+ count=7600
208+ count=7700
209+ count=7800
210+ count=7900
211+ count=8000
212+ count=8100
213+ count=8200
214+ count=8300
215+ count=8400
216+ count=8500
217+ count=8600
218+ count=8700
219+ count=8800
220+ count=8900
221+ count=9000
222+ count=9100
223+ count=9200
224+ count=9300
225+ count=9400
226+ count=9500
227+ count=9600
228+ count=9700
229+ count=9800
230+ count=9900
231+ count=10000
232+ */
You can’t perform that action at this time.
0 commit comments