java允许多线程,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),

将会导致数据不准确,相互之间产生冲突。
比方说,我们在买火车票的时候,如何能确定余票数据准确而无误差,这个时候就需要用到同步。
1:使用同步方法:
即用 synchronized关键字修饰方法。
public class Text {//线程同步的5种方式private int index = 10;public int getIndex(){return index;}/*** 用同步方法实现** @param dex*/public synchronized void saveValue(int dex){index+=dex;}
 2:使用同步代码块:
  即有synchronized关键字修饰的语句块。
  
public class Text {//线程同步的5种方式private int index = 10;public int getIndex(){return index;}/*** 用同步方法实现** @param dex*///    public synchronized void saveValue(int dex){
//        index+=dex;
//    }/*** 用同步代码块实现** @param dex*/public void saveValue(int dex){synchronized (this){index+=dex;}}
 3:使用特殊域变量(volatile)实现线程同步
a:volatile关键字为域变量的访问提供了一种免锁机制, 
b:使用volatile修饰域相当于告诉 虚拟机该域可能会被其他线程更新,

c:因此每次使用该域就要重新计算,而不是使用寄存器中的值

d:volatile不会提供任何原子操作,它也不能用来修饰final类型的变量

 
  其他代码不变,只需要在定义变量的时候用volatile

   private volatile int index = 10;
  注意,不需要再使用synchronized
public void saveValue(int dex){index+=dex;
}

4:使用 ReentrantLock类:

public class Text {//线程同步的5种方式private int index = 10;private Lock lock = new ReentrantLock();public int getIndex(){return index;}public void saveValue(int dex){lock.lock();try{index+=dex;}finally{lock.unlock();}}
  使用ReentrantLock类,注意要及时释放锁
 5:使用局部变量实现线程同步

如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,

副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。

   ThreadLocal() : 创建一个线程本地变量

get() : 返回此线程局部变量的当前线程副本中的值

initialValue() : 返回此线程局部变量的当前线程的"初始值"

set(T value) : 将此线程局部变量的当前线程副本中的值设置为value

    private static ThreadLocal<Integer> index = new ThreadLocal<Integer>(){@Overrideprotected Integer initialValue() {return 10;}};public  int getAccount(){return  index.get();};public void save (int money){index.set(index.get()+money);}
 下面,我们来测试下用锁和不用锁的区别:
  首先编写测试代码,
public class Go {public static void main(String[] args) {Go go = new Go();go.TestThread();}public void TestThread(){Text text = new Text();NewThread th = new NewThread(text);System.out.println("线程1");Thread thread1 = new Thread(th);thread1.start();System.out.println("线程2");Thread thread2 = new Thread(th);thread2.start();}class NewThread implements Runnable{private Text text;public NewThread(Text text){this.text = text;}@Overridepublic void run() {for (int i = 0; i < 200; i++) {text.saveValue(1);System.out.println(i + "账户余额为:" + text.getIndex());}}}
}
在不用锁的情况下:我们看输出值
0账户余额为:12
0账户余额为:12
1账户余额为:13
1账户余额为:14
2账户余额为:15
2账户余额为:16
3账户余额为:17
3账户余额为:18
4账户余额为:19
4账户余额为:20
5账户余额为:21
5账户余额为:22
6账户余额为:23
6账户余额为:24
7账户余额为:25
7账户余额为:26
8账户余额为:27
9账户余额为:29
8账户余额为:28
10账户余额为:30
9账户余额为:31
11账户余额为:32
10账户余额为:33
12账户余额为:34
11账户余额为:35
13账户余额为:36
12账户余额为:37
14账户余额为:38
13账户余额为:39
14账户余额为:41
15账户余额为:42
16账户余额为:43
17账户余额为:44
18账户余额为:45
15账户余额为:40
19账户余额为:46
16账户余额为:47
20账户余额为:48
17账户余额为:49
21账户余额为:50
22账户余额为:52
23账户余额为:53
24账户余额为:54
18账户余额为:51
25账户余额为:55
19账户余额为:56
26账户余额为:57
20账户余额为:58
27账户余额为:59
21账户余额为:60
28账户余额为:61
22账户余额为:62
23账户余额为:64
24账户余额为:65
29账户余额为:63
25账户余额为:66
30账户余额为:67
26账户余额为:68
31账户余额为:69
27账户余额为:70
32账户余额为:71
33账户余额为:73
28账户余额为:72
34账户余额为:74
29账户余额为:75
35账户余额为:76
30账户余额为:77
36账户余额为:78
31账户余额为:79
37账户余额为:80
32账户余额为:81
38账户余额为:82
33账户余额为:83
39账户余额为:84
40账户余额为:86
34账户余额为:85
41账户余额为:87
42账户余额为:89
35账户余额为:88
36账户余额为:91
37账户余额为:92
43账户余额为:90
38账户余额为:93
44账户余额为:94
39账户余额为:95
45账户余额为:96
46账户余额为:98
47账户余额为:99
48账户余额为:100
49账户余额为:101
50账户余额为:102
51账户余额为:103
40账户余额为:97
52账户余额为:104
41账户余额为:105
53账户余额为:106
42账户余额为:107
54账户余额为:108
43账户余额为:109
55账户余额为:110
44账户余额为:111
56账户余额为:112
45账户余额为:113
57账户余额为:114
46账户余额为:115
58账户余额为:116
47账户余额为:117
59账户余额为:118
48账户余额为:119
60账户余额为:120
49账户余额为:121
61账户余额为:122
62账户余额为:124
50账户余额为:123
63账户余额为:125
51账户余额为:126
64账户余额为:127
52账户余额为:128
65账户余额为:129
53账户余额为:130
66账户余额为:131
67账户余额为:133
54账户余额为:132
68账户余额为:134
69账户余额为:136
70账户余额为:137
71账户余额为:138
72账户余额为:139
73账户余额为:140
74账户余额为:141
75账户余额为:142
76账户余额为:143
77账户余额为:144
78账户余额为:145
79账户余额为:146
80账户余额为:147
81账户余额为:148
82账户余额为:149
83账户余额为:150
84账户余额为:151
85账户余额为:152
86账户余额为:153
87账户余额为:154
88账户余额为:155
89账户余额为:156
90账户余额为:157
91账户余额为:158
92账户余额为:159
55账户余额为:135
93账户余额为:160
56账户余额为:161
94账户余额为:162
57账户余额为:163
58账户余额为:165
59账户余额为:166
60账户余额为:167
61账户余额为:168
62账户余额为:169
63账户余额为:170
64账户余额为:171
95账户余额为:164
65账户余额为:172
96账户余额为:173
66账户余额为:174
97账户余额为:175
67账户余额为:176
98账户余额为:177
68账户余额为:178
99账户余额为:179
69账户余额为:180
100账户余额为:181
70账户余额为:182
101账户余额为:183
71账户余额为:184
102账户余额为:185
72账户余额为:186
103账户余额为:187
73账户余额为:188
104账户余额为:189
74账户余额为:190
105账户余额为:191
75账户余额为:192
106账户余额为:193
76账户余额为:194
107账户余额为:195
77账户余额为:196
108账户余额为:197
78账户余额为:198
109账户余额为:199
79账户余额为:200
110账户余额为:201
80账户余额为:202
111账户余额为:203
81账户余额为:204
112账户余额为:205
82账户余额为:206
113账户余额为:207
83账户余额为:208
114账户余额为:209
84账户余额为:210
115账户余额为:211
85账户余额为:212
116账户余额为:213
86账户余额为:214
117账户余额为:215
87账户余额为:216
118账户余额为:217
88账户余额为:218
119账户余额为:219
89账户余额为:220
120账户余额为:221
90账户余额为:222
121账户余额为:223
91账户余额为:224
122账户余额为:225
92账户余额为:226
123账户余额为:227
93账户余额为:228
124账户余额为:229
94账户余额为:230
125账户余额为:231
95账户余额为:232
126账户余额为:233
96账户余额为:234
127账户余额为:235
97账户余额为:236
128账户余额为:237
98账户余额为:238
129账户余额为:239
99账户余额为:240
130账户余额为:241
100账户余额为:242
131账户余额为:243
101账户余额为:244
132账户余额为:245
102账户余额为:246
133账户余额为:247
103账户余额为:248
134账户余额为:249
104账户余额为:250
135账户余额为:251
105账户余额为:252
136账户余额为:253
106账户余额为:254
137账户余额为:255
107账户余额为:256
138账户余额为:257
108账户余额为:258
139账户余额为:259
109账户余额为:260
140账户余额为:261
110账户余额为:262
141账户余额为:263
111账户余额为:264
142账户余额为:265
112账户余额为:266
143账户余额为:267
113账户余额为:268
144账户余额为:269
145账户余额为:271
114账户余额为:270
146账户余额为:272
115账户余额为:273
147账户余额为:274
116账户余额为:275
148账户余额为:276
117账户余额为:277
149账户余额为:278
118账户余额为:279
150账户余额为:280
151账户余额为:282
152账户余额为:283
153账户余额为:284
154账户余额为:285
155账户余额为:286
156账户余额为:287
157账户余额为:288
158账户余额为:289
159账户余额为:290
160账户余额为:291
119账户余额为:281
161账户余额为:292
162账户余额为:294
163账户余额为:295
164账户余额为:296
120账户余额为:293
165账户余额为:297
121账户余额为:298
166账户余额为:299
122账户余额为:300
167账户余额为:301
123账户余额为:302
168账户余额为:303
169账户余额为:305
170账户余额为:306
171账户余额为:307
172账户余额为:308
173账户余额为:309
124账户余额为:304
174账户余额为:310
125账户余额为:311
175账户余额为:312
126账户余额为:313
176账户余额为:314
127账户余额为:315
177账户余额为:316
178账户余额为:318
179账户余额为:319
180账户余额为:320
181账户余额为:321
182账户余额为:322
183账户余额为:323
184账户余额为:324
185账户余额为:325
128账户余额为:317
186账户余额为:326
187账户余额为:328
129账户余额为:327
188账户余额为:329
130账户余额为:330
189账户余额为:331
131账户余额为:332
190账户余额为:333
191账户余额为:335
192账户余额为:336
193账户余额为:337
194账户余额为:338
195账户余额为:339
196账户余额为:340
197账户余额为:341
132账户余额为:334
198账户余额为:342
133账户余额为:343
199账户余额为:344
134账户余额为:345
135账户余额为:346
136账户余额为:347
137账户余额为:348
138账户余额为:349
139账户余额为:350
140账户余额为:351
141账户余额为:352
142账户余额为:353
143账户余额为:354
144账户余额为:355
145账户余额为:356
146账户余额为:357
147账户余额为:358
148账户余额为:359
149账户余额为:360
150账户余额为:361
151账户余额为:362
152账户余额为:363
153账户余额为:364
154账户余额为:365
155账户余额为:366
156账户余额为:367
157账户余额为:368
158账户余额为:369
159账户余额为:370
160账户余额为:371
161账户余额为:372
162账户余额为:373
163账户余额为:374
164账户余额为:375
165账户余额为:376
166账户余额为:377
167账户余额为:378
168账户余额为:379
169账户余额为:380
170账户余额为:381
171账户余额为:382
172账户余额为:383
173账户余额为:384
174账户余额为:385
175账户余额为:386
176账户余额为:387
177账户余额为:388
178账户余额为:389
179账户余额为:390
180账户余额为:391
181账户余额为:392
182账户余额为:393
183账户余额为:394
184账户余额为:395
185账户余额为:396
186账户余额为:397
187账户余额为:398
188账户余额为:399
189账户余额为:400
190账户余额为:401
191账户余额为:402
192账户余额为:403
193账户余额为:404
194账户余额为:405
195账户余额为:406
196账户余额为:407
197账户余额为:408
198账户余额为:409
199账户余额为:410

在用锁的情况下:我们看输出值

0账户余额为:11
1账户余额为:12
2账户余额为:13
3账户余额为:14
4账户余额为:15
5账户余额为:16
6账户余额为:17
7账户余额为:18
8账户余额为:19
9账户余额为:20
10账户余额为:21
11账户余额为:22
12账户余额为:23
13账户余额为:24
14账户余额为:25
15账户余额为:26
16账户余额为:27
17账户余额为:28
18账户余额为:29
19账户余额为:30
20账户余额为:31
21账户余额为:32
22账户余额为:33
23账户余额为:34
24账户余额为:35
25账户余额为:36
26账户余额为:37
27账户余额为:38
28账户余额为:39
29账户余额为:40
30账户余额为:41
31账户余额为:42
32账户余额为:43
33账户余额为:44
34账户余额为:45
35账户余额为:46
36账户余额为:47
37账户余额为:48
38账户余额为:49
39账户余额为:50
40账户余额为:51
41账户余额为:52
42账户余额为:53
43账户余额为:54
44账户余额为:55
45账户余额为:56
46账户余额为:57
47账户余额为:58
48账户余额为:59
49账户余额为:60
50账户余额为:61
51账户余额为:62
52账户余额为:63
53账户余额为:64
54账户余额为:65
55账户余额为:66
56账户余额为:67
57账户余额为:68
58账户余额为:69
59账户余额为:70
60账户余额为:71
61账户余额为:72
62账户余额为:73
63账户余额为:74
64账户余额为:75
65账户余额为:76
66账户余额为:77
67账户余额为:78
68账户余额为:79
69账户余额为:80
70账户余额为:81
71账户余额为:82
72账户余额为:83
73账户余额为:84
74账户余额为:85
75账户余额为:86
76账户余额为:87
77账户余额为:88
78账户余额为:89
79账户余额为:90
80账户余额为:91
81账户余额为:92
82账户余额为:93
83账户余额为:94
84账户余额为:95
85账户余额为:96
86账户余额为:97
87账户余额为:98
88账户余额为:99
89账户余额为:100
90账户余额为:101
91账户余额为:102
92账户余额为:103
93账户余额为:104
94账户余额为:105
95账户余额为:106
96账户余额为:107
97账户余额为:108
98账户余额为:109
99账户余额为:110
100账户余额为:111
101账户余额为:112
102账户余额为:113
103账户余额为:114
104账户余额为:115
105账户余额为:116
106账户余额为:117
107账户余额为:118
108账户余额为:119
109账户余额为:120
110账户余额为:121
111账户余额为:122
112账户余额为:123
113账户余额为:124
114账户余额为:125
115账户余额为:126
116账户余额为:127
117账户余额为:128
118账户余额为:129
119账户余额为:130
120账户余额为:131
121账户余额为:132
122账户余额为:133
123账户余额为:134
124账户余额为:135
125账户余额为:136
126账户余额为:137
127账户余额为:138
128账户余额为:139
129账户余额为:140
130账户余额为:141
131账户余额为:142
132账户余额为:143
0账户余额为:144
1账户余额为:146
133账户余额为:146
2账户余额为:147
134账户余额为:148
3账户余额为:149
135账户余额为:150
4账户余额为:151
136账户余额为:152
5账户余额为:153
137账户余额为:154
6账户余额为:155
138账户余额为:156
7账户余额为:157
139账户余额为:158
8账户余额为:159
140账户余额为:160
9账户余额为:161
141账户余额为:162
10账户余额为:163
142账户余额为:164
11账户余额为:165
143账户余额为:166
12账户余额为:167
144账户余额为:168
13账户余额为:169
145账户余额为:170
14账户余额为:171
146账户余额为:172
147账户余额为:174
148账户余额为:175
149账户余额为:176
150账户余额为:177
151账户余额为:178
152账户余额为:179
153账户余额为:180
154账户余额为:181
155账户余额为:182
156账户余额为:183
157账户余额为:184
158账户余额为:185
159账户余额为:186
160账户余额为:187
161账户余额为:188
162账户余额为:189
163账户余额为:190
164账户余额为:191
165账户余额为:192
166账户余额为:193
167账户余额为:194
168账户余额为:195
169账户余额为:196
170账户余额为:197
171账户余额为:198
172账户余额为:199
173账户余额为:200
174账户余额为:201
175账户余额为:202
176账户余额为:203
177账户余额为:204
178账户余额为:205
179账户余额为:206
180账户余额为:207
181账户余额为:208
182账户余额为:209
183账户余额为:210
184账户余额为:211
185账户余额为:212
186账户余额为:213
187账户余额为:214
188账户余额为:215
189账户余额为:216
190账户余额为:217
191账户余额为:218
192账户余额为:219
193账户余额为:220
194账户余额为:221
195账户余额为:222
196账户余额为:223
197账户余额为:224
198账户余额为:225
199账户余额为:226
15账户余额为:173
16账户余额为:227
17账户余额为:228
18账户余额为:229
19账户余额为:230
20账户余额为:231
21账户余额为:232
22账户余额为:233
23账户余额为:234
24账户余额为:235
25账户余额为:236
26账户余额为:237
27账户余额为:238
28账户余额为:239
29账户余额为:240
30账户余额为:241
31账户余额为:242
32账户余额为:243
33账户余额为:244
34账户余额为:245
35账户余额为:246
36账户余额为:247
37账户余额为:248
38账户余额为:249
39账户余额为:250
40账户余额为:251
41账户余额为:252
42账户余额为:253
43账户余额为:254
44账户余额为:255
45账户余额为:256
46账户余额为:257
47账户余额为:258
48账户余额为:259
49账户余额为:260
50账户余额为:261
51账户余额为:262
52账户余额为:263
53账户余额为:264
54账户余额为:265
55账户余额为:266
56账户余额为:267
57账户余额为:268
58账户余额为:269
59账户余额为:270
60账户余额为:271
61账户余额为:272
62账户余额为:273
63账户余额为:274
64账户余额为:275
65账户余额为:276
66账户余额为:277
67账户余额为:278
68账户余额为:279
69账户余额为:280
70账户余额为:281
71账户余额为:282
72账户余额为:283
73账户余额为:284
74账户余额为:285
75账户余额为:286
76账户余额为:287
77账户余额为:288
78账户余额为:289
79账户余额为:290
80账户余额为:291
81账户余额为:292
82账户余额为:293
83账户余额为:294
84账户余额为:295
85账户余额为:296
86账户余额为:297
87账户余额为:298
88账户余额为:299
89账户余额为:300
90账户余额为:301
91账户余额为:302
92账户余额为:303
93账户余额为:304
94账户余额为:305
95账户余额为:306
96账户余额为:307
97账户余额为:308
98账户余额为:309
99账户余额为:310
100账户余额为:311
101账户余额为:312
102账户余额为:313
103账户余额为:314
104账户余额为:315
105账户余额为:316
106账户余额为:317
107账户余额为:318
108账户余额为:319
109账户余额为:320
110账户余额为:321
111账户余额为:322
112账户余额为:323
113账户余额为:324
114账户余额为:325
115账户余额为:326
116账户余额为:327
117账户余额为:328
118账户余额为:329
119账户余额为:330
120账户余额为:331
121账户余额为:332
122账户余额为:333
123账户余额为:334
124账户余额为:335
125账户余额为:336
126账户余额为:337
127账户余额为:338
128账户余额为:339
129账户余额为:340
130账户余额为:341
131账户余额为:342
132账户余额为:343
133账户余额为:344
134账户余额为:345
135账户余额为:346
136账户余额为:347
137账户余额为:348
138账户余额为:349
139账户余额为:350
140账户余额为:351
141账户余额为:352
142账户余额为:353
143账户余额为:354
144账户余额为:355
145账户余额为:356
146账户余额为:357
147账户余额为:358
148账户余额为:359
149账户余额为:360
150账户余额为:361
151账户余额为:362
152账户余额为:363
153账户余额为:364
154账户余额为:365
155账户余额为:366
156账户余额为:367
157账户余额为:368
158账户余额为:369
159账户余额为:370
160账户余额为:371
161账户余额为:372
162账户余额为:373
163账户余额为:374
164账户余额为:375
165账户余额为:376
166账户余额为:377
167账户余额为:378
168账户余额为:379
169账户余额为:380
170账户余额为:381
171账户余额为:382
172账户余额为:383
173账户余额为:384
174账户余额为:385
175账户余额为:386
176账户余额为:387
177账户余额为:388
178账户余额为:389
179账户余额为:390
180账户余额为:391
181账户余额为:392
182账户余额为:393
183账户余额为:394
184账户余额为:395
185账户余额为:396
186账户余额为:397
187账户余额为:398
188账户余额为:399
189账户余额为:400
190账户余额为:401
191账户余额为:402
192账户余额为:403
193账户余额为:404
194账户余额为:405
195账户余额为:406
196账户余额为:407
197账户余额为:408
198账户余额为:409
199账户余额为:410
 结果很明显了,这就是同步的作用。

关于线程同步的几种方法相关推荐

  1. C#线程同步的几种方法

    在网上也看过一些关于线程同步的文章,其实线程同步有好几种方法,下面我就简单的做一下归纳. 一.volatile关键字 volatile是最简单的一种同步方法,当然简单是要付出代价的.它只能在变量一级做 ...

  2. 归纳一下:C#线程同步的几种方法

    我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在后台处理一大堆数据,但还要使用户界面处于可操作状态:或者你的程序需要访问一些外部资源如数据库或网络文件等.这些情况你都可以创建一个子线程 ...

  3. unix c线程同步的三种方法:互斥量、读写锁以及条件变-xhb8413-ChinaUnix博客

    unix c线程同步的三种方法:互斥量.读写锁以及条件变-xhb8413-ChinaUnix博客 unix c线程同步的三种方法:互斥量.读写锁以及条件变 2012-03-30 14:42:38 分类 ...

  4. linux:线程同步的5种方法

    linux:线程同步的5种方法 一.为什么要使用线程: 二.线程同步的5种方法 2.1 互斥量 2.2 读写锁 2.3 条件变量 2.4 自旋锁 2.5 屏障 一.为什么要使用线程: <1> ...

  5. C++中线程同步的四种方法(Win32平台)

    1.同步和互斥 互质是一种特殊的同步.线程同步一般指线程之间的执行存在某种程度上的相互依赖关系. 2.C++中线程同步的四种方法 (1)事件(Event); (2)信号量(semaphore); (3 ...

  6. 15.线程同步的几种方法

    一.为什么需要线程同步 线程同步通常是出现在多线程环境下的问题,对于多个线程同时访问的共享内存中的变量,如果不进行保护,就会导致一些列数据出错问题.以下图为例: 假设线程A在第一次读取变量的值为10, ...

  7. java线程同步的7种方法

    为何要使用同步?      java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),      将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有 ...

  8. java线程同步的五种方法

    2019独角兽企业重金招聘Python工程师标准>>> 1.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, ...

  9. 实现线程同步的几种方法

    在多线程程序中,会出现多个线程抢占一个资源的情况,这时间有可能会造成冲突,也就是一个线程可能还没来得及将更改的 资源保存,另一个线程的更改就开始了.可能造成数据不一致.因此引入多线程同步,也就是说多个 ...

最新文章

  1. 揭秘特斯拉自动驾驶雄心:最大优势非算法或技术而是海量数据
  2. “互联网+”谋定文物市场-国情讲坛·宗佩山:构建共享平台
  3. Linux从零开始(二、基础命令)
  4. Java 地下迷宫·算法·(ACM/蓝桥杯)·递归解法
  5. iOS中加载Flutter中的图片
  6. 调整home和根分区大小
  7. VS中,一个头文件使用另外一个头文件的静态变量,要谨慎
  8. 简述导线平差计算的五个步骤_附合导线平差计算过程说明
  9. noi2016试题C语言,noip2016普及组初赛试题和答案.pdf
  10. web切图工具 css,WEB前端之切图篇
  11. java项目:基于springboot+vue的实验室预约管理系统 nodejs
  12. SVPWM的一些理解
  13. 数据库中的三种完整性:域、实体、参照完整性
  14. PHP微信柏拉图性格标签生成器源码
  15. 用户画像,知乎Live总结
  16. 2022 浙大城市学院 新生赛 补题
  17. Redis 队列好处
  18. 时间同步服务器:时间同步的三种方式
  19. 计算机数据采集原理是什么,数据采集器工作原理是什么?
  20. PGN(Pointer-Generator Networks)

热门文章

  1. Qt::Q_DECLARE_METATYPE
  2. Win32程序设计初步之线程
  3. Reactive的使用(reactive 和 shallowReactive使用上区别)
  4. Luminati通过住宅IP网络工作,其可靠性如何?
  5. MinIO 文件服务器简单搭建
  6. [转]深度剖析闪电网络
  7. 利用ESP8266-12F实现与51单片机通信及温湿度传感器数据交互
  8. JUC基础(一): 什么是JUC(JUC概述)
  9. Mysql-时间的存储 datetime还是时间戳timestamp?
  10. EffectiveC++-条款52:写了 placement new 也要写 placement delete