-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathjvmThread.html
More file actions
645 lines (564 loc) · 219 KB
/
Copy pathjvmThread.html
File metadata and controls
645 lines (564 loc) · 219 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>jvm线程 | Jeskson-微服务分布式</title>
<meta name="generator" content="VuePress 1.9.10">
<meta name="description" content="Jeskson文档-架构师">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
<link rel="preload" href="/JavaPlusDoc/assets/css/0.styles.69a89f58.css" as="style"><link rel="preload" href="/JavaPlusDoc/assets/js/app.ff4b1912.js" as="script"><link rel="preload" href="/JavaPlusDoc/assets/js/7.dfc0397a.js" as="script"><link rel="preload" href="/JavaPlusDoc/assets/js/2.cfbace72.js" as="script"><link rel="preload" href="/JavaPlusDoc/assets/js/1.d59a348b.js" as="script"><link rel="preload" href="/JavaPlusDoc/assets/js/199.724aa135.js" as="script"><link rel="prefetch" href="/JavaPlusDoc/assets/js/10.8af913bb.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/100.2c53fcbd.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/101.8ccd9f40.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/102.6abe231e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/103.0e437ead.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/104.d915d7e5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/105.5d55ab62.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/106.07d5a34b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/107.513f25ac.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/108.7cda8012.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/109.b70451e6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/11.7e3aeb50.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/110.b8dbdfb8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/111.71acaa8b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/112.ca35903a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/113.2db92a40.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/114.6e775813.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/115.d4fcd4df.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/116.5fbd9309.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/117.67d2a408.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/118.458ec435.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/119.044db67a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/120.433d403c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/121.4a247941.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/122.edf76321.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/123.24f157cc.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/124.8d2eafc2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/125.9fcad17b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/126.ea0c1e50.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/127.eb6e5a6c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/128.c37745dd.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/129.d42e1da1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/130.1f940759.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/131.f048f51b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/132.f2e05b7b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/133.1025c747.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/134.e986b5c6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/135.ee67ecb2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/136.51486790.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/137.7afd61da.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/138.a9b7f1d5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/139.b0abdadb.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/140.928f8b9d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/141.75ac97ba.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/142.e4a40851.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/143.abb68380.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/144.4a31149b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/145.4a204821.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/146.df6efac7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/147.35f39f6d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/148.8f687af8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/149.75598127.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/15.ab64ce54.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/150.7c950dfa.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/151.1a568fbd.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/152.39d4b618.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/153.f7912ca4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/154.a7e8c404.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/155.11719bb5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/156.b0f61c27.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/157.78f0d5ec.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/158.96bd7aa7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/159.c826f336.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/16.5859debf.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/160.79fcd999.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/161.6e041a18.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/162.c1dd8613.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/163.ab44d65f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/164.55f30c4b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/165.1945cc91.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/166.7ce08c0a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/167.39902e9e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/168.0a015885.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/169.68d1a118.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/17.f3af3709.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/170.284bccfc.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/171.8abc7f27.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/172.1fda5d51.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/173.bb2d4d2b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/174.b34f63a3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/175.28b93c68.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/176.7c670e26.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/177.5163bae9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/178.51467a77.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/179.9738c734.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/18.7387f7e6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/180.ec8da569.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/181.321020b2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/182.eaa16e7a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/183.fd9bacb6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/184.987ef50e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/185.65f18305.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/186.ece5c753.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/187.b0e4a1ac.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/188.5ac430dd.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/189.e5a35218.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/19.f4fea483.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/190.0d633d69.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/191.cb84e758.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/192.5696bda6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/193.c152ca1b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/194.58104929.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/195.f5268146.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/196.09b66f73.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/197.ac23f446.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/198.261200a2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/20.070d4a3f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/200.2fc8b0b5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/201.8d7b1f57.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/202.b803e840.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/203.2eff0b6c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/204.d5a4c7c6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/205.88bbae92.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/206.cd68581c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/207.85c260ec.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/208.fd085d80.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/209.d2453e08.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/21.78933f38.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/210.116334ba.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/211.345d1772.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/212.1a27f8c9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/213.59877e34.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/214.6480dee2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/215.70ae1d89.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/216.09ca4312.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/217.af7bdf8c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/218.02a40cca.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/219.f484832f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/22.4753ae4d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/220.6ba39f2b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/221.d585a6e3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/222.557543ae.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/223.5140b6e5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/224.eaa0e691.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/225.356a94a3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/226.fc10b75b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/227.9af00c34.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/228.4dc3c41b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/229.d11b02a5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/23.5ad2a326.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/230.519fdeb6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/231.680b752e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/232.1adf38e1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/233.fcc3e8cc.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/234.7295f17c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/235.860622cd.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/236.07a1c33e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/237.8b3b18c5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/238.02b07b10.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/239.4b1eaae1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/24.d8ef76cb.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/240.7a378249.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/241.50826979.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/242.a827cb6e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/243.02ee6149.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/244.95a1f931.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/245.839cc4a8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/246.a8298108.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/247.17c29ff6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/248.076346b6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/249.a5694c3b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/25.56c87efe.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/250.db53d9fa.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/251.e5678920.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/252.4a97a73b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/253.fab94cc6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/254.f6fe60a9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/255.5c90176f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/256.51b253fa.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/257.7545eceb.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/258.d30ea980.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/259.19f6dd5e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/26.e137a506.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/260.b45fa309.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/261.b82f3b68.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/262.66dbb3e0.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/263.1bd0b88a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/264.e2d16987.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/265.a999dac8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/266.0e3ffc82.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/267.31bcc9c4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/268.21cadd7e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/269.6d41a49b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/27.8fd1e34f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/270.cdc34c03.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/271.14d67f07.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/272.6b7ef511.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/273.29143d7e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/274.98c8d414.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/275.fcbb9b74.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/276.57d87a0b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/277.f32479eb.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/278.6c8f70ff.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/279.ee430fb0.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/28.ec80e187.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/280.6482b349.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/281.a146cd78.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/282.859de97e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/283.c15404e4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/284.01dad2ca.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/285.619be44a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/286.d242787c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/287.c87ab04d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/288.e030d44a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/289.59a5a660.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/29.a2b39230.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/290.eab48a51.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/291.1f4b1e47.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/292.a13c9a99.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/293.b4eb7ce5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/294.d4abf953.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/295.8daf6058.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/296.368c24d4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/297.3f74b182.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/298.6988474c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/299.dfad3465.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/3.40e3acc6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/30.9a11650a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/300.17321217.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/301.d9a1826e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/302.09a7987d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/303.5025013f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/304.d4b8a3d1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/305.159772d2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/306.24c63e31.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/307.e6a6d270.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/308.4e507498.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/309.aee111c8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/31.874f8153.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/310.5f1b5ca1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/311.34ae5cb3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/312.c43ea236.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/313.b847ec00.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/314.d64f5684.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/315.7d106bd1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/316.867e71e0.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/317.494bb25c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/318.b855401a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/319.6ac2e09f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/32.ee0b114a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/320.5c40f84e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/321.f2cf33ad.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/322.3fa8fc56.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/323.8a4d04ec.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/324.8105e17f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/325.2550dcad.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/326.c3ff61c8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/327.3a7ecc7c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/328.fed3b915.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/329.827908ae.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/33.cd82de30.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/330.937816d2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/331.c852bfdf.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/332.c505b6c7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/333.bef6e033.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/334.08a55ffe.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/335.6b268219.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/336.82d3fb2a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/337.39956547.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/338.6136640d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/339.81f5ad5b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/34.9c90a2a7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/340.48782f66.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/341.d47516d3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/342.4436bb4a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/343.908c9bd3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/344.697ee8bd.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/345.ab9f1f75.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/346.076fd1c5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/347.3be42a59.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/348.97ba33db.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/349.3c07d100.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/35.d8543719.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/350.ec1bc3db.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/351.9d3153e4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/352.e71317f4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/353.261cb101.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/354.f3e47221.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/355.b307a3ed.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/356.b38d86c2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/357.d1d9dc9d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/358.a03fc094.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/359.6b15776d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/36.ca9f16ca.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/360.bb0c54dd.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/361.35cefb19.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/362.56d3b2f7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/363.86a26ed2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/364.94d338d5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/365.07637682.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/366.575090a7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/367.a24af406.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/368.84aaad95.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/369.878f8b2f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/37.21403d6a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/370.dd867f9d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/371.dd80e718.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/372.c7b54b81.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/373.e2554640.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/374.b9b710d2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/375.c9ad50e0.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/376.9b86837b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/377.05760818.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/378.12ec82d0.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/379.173b0296.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/38.bc6b1c3c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/380.d0bdf0e1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/381.79d7a925.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/382.2c726e6e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/383.c3692568.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/384.7d008b7d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/385.08ce6856.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/386.12bb7596.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/387.4ee785b3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/388.ebe74e39.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/389.05b70f9b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/39.8a7f24eb.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/390.bdcfda98.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/391.5f2295e0.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/392.8e12903a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/393.c553ee9b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/394.142fba6a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/395.2330c45a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/396.a7c9d0aa.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/397.e8412077.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/398.464f44c4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/399.aaa72c53.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/4.8b5d3c01.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/40.98ac2f84.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/400.154963b8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/401.894a8c6f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/402.8f683588.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/403.b8dbd9cb.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/404.fc97c865.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/405.398fff13.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/406.ada3f6c6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/407.46666ee3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/408.39295bc5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/409.00710db4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/41.b36c815d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/410.0cb22004.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/411.e5923416.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/412.f58d3da9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/413.0f6f7f8b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/414.015eb6b2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/415.b155b195.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/416.3244bedb.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/417.26b9b844.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/418.37dd3bda.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/419.4a64bc57.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/42.8c4dfaf7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/420.15ff5f8b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/421.988f32c6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/422.75528a99.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/423.366db802.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/424.508f7b6c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/425.6f763bb5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/426.659742ea.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/427.8b3d75d8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/428.2f29aadb.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/429.2f28db07.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/43.815d0502.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/430.abf10612.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/431.9e64562c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/432.99f2f904.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/433.6296d93e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/434.f7904247.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/435.98715d2d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/436.9fefac84.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/437.fea151e9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/438.7191b005.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/439.f3ccd045.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/44.ba19f402.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/440.2de0c08c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/441.8e3cb7b2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/442.b93b4817.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/443.39c48a3a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/444.1655e664.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/445.97e47e06.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/446.d2adebf8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/447.4be86ce4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/448.0b587761.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/449.ddf18f4c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/45.4182ef1e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/450.28fa53ca.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/451.ef5b2bd0.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/452.e121c917.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/453.c8132e49.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/454.2432fab6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/455.34584ef6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/456.9903968f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/457.63aa6849.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/458.0b9d9b23.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/459.9f021166.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/46.2a154851.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/460.a629ff70.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/461.d75e8448.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/462.552a8aef.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/463.ec331fd1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/464.1890b541.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/465.2a0bd1b9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/466.610de9f1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/467.2d46b708.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/468.04a56bcc.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/469.7d6a224c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/47.9b096bd4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/470.da81c67e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/471.e592f995.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/472.bc085169.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/473.0cb79355.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/474.7f396d93.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/475.e2adea36.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/476.8b82e0ff.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/477.8bd4fa06.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/478.3fa4b579.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/479.6029394b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/48.fff8acb7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/480.1eb05b6f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/481.18496764.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/482.11a56dce.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/483.285ea6df.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/484.b15c921d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/485.53d859c3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/486.4680c312.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/487.2376b70e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/488.bd4ff8a8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/489.7c19b407.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/49.510ceb1b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/490.5c95e6f9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/491.c22e75d5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/492.e7342ffc.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/493.7e251855.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/494.b4a9a5ea.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/495.36fc9e68.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/496.7616b0ef.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/497.a627b99d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/498.e6ec30be.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/499.9f8c621b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/5.dd2e9586.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/50.1c015ec1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/500.e4f04fa7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/501.23e805ce.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/502.c7707c65.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/503.3f577d77.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/504.5fd17fd2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/505.0e03be2a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/506.e87bada7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/507.2b245401.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/508.87b73a39.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/509.cc69075a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/51.fa0d4ce8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/510.6490c5fe.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/511.be7a1d82.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/512.c680c2c9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/513.36b29e3e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/514.d3ae3a27.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/515.cdb5681f.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/516.469418ff.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/517.24928bff.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/518.6a26365b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/519.59e59dea.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/52.03c9ff54.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/520.23673bd1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/521.a5806db8.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/522.73be9af3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/523.0e7e4925.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/524.327700e3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/525.c768492d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/526.febcc9d9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/527.dd5fd0b5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/528.7e1d4ec5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/529.8bdce1a4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/53.7e80043a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/530.44e010d9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/531.f67a86b7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/532.09b7ead5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/533.7adabdfa.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/534.f868f74a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/535.c98d4c0e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/536.370ce042.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/537.753a8af1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/538.d017f77d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/539.a133376e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/54.f7955daf.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/540.f4dbc9d0.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/55.686f3985.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/56.cb0430ac.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/57.eb834e65.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/58.bf089253.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/59.14efcce4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/6.bab6d49b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/60.eaf6e3a4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/61.3bbdc790.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/62.38f6d5ec.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/63.02f1b305.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/64.1722673d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/65.6547e007.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/66.4e8931dc.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/67.cfca24ed.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/68.8add83f1.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/69.1693fd1e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/70.179cc187.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/71.313fbab6.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/72.0e0d03ef.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/73.9b65b544.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/74.b4c4befd.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/75.f2ffd04c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/76.d8a485ae.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/77.df0cc69e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/78.63985859.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/79.1b530da0.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/8.482e3594.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/80.48deda5a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/81.26d7dd05.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/82.526c2b16.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/83.a00c4a7e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/84.f55a4b6a.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/85.62ab46e7.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/86.82d619c9.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/87.e726803b.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/88.a864fe77.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/89.dee71f5d.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/9.cb5e384c.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/90.f1aadb95.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/91.94144a2e.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/92.72d39ce5.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/93.b68bfc16.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/94.8957be11.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/95.eb9d19f3.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/96.093d0db2.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/97.5ba97253.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/98.6bf338d4.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/99.ba035d72.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/vendors~docsearch.0b3f4b62.js"><link rel="prefetch" href="/JavaPlusDoc/assets/js/vendors~flowchart.2a4bfc54.js">
<link rel="stylesheet" href="/JavaPlusDoc/assets/css/0.styles.69a89f58.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container" data-v-7dd95ae2><div data-v-7dd95ae2><div class="password-shadow password-wrapper-out" style="display:none;" data-v-59e6cb88 data-v-7dd95ae2 data-v-7dd95ae2><h3 class="title" data-v-59e6cb88>Jeskson-微服务分布式</h3> <p class="description" data-v-59e6cb88>Jeskson文档-架构师</p> <label id="box" class="inputBox" data-v-59e6cb88><input type="password" value="" data-v-59e6cb88> <span data-v-59e6cb88>Konck! Knock!</span> <button data-v-59e6cb88>OK</button></label> <div class="footer" data-v-59e6cb88><span data-v-59e6cb88><i class="iconfont reco-theme" data-v-59e6cb88></i> <a target="blank" href="https://vuepress-theme-reco.recoluan.com" data-v-59e6cb88>vuePress-theme-reco</a></span> <span data-v-59e6cb88><i class="iconfont reco-copyright" data-v-59e6cb88></i> <a data-v-59e6cb88><!---->
<!---->
2025
</a></span></div></div> <div class="hide" data-v-7dd95ae2><header class="navbar" data-v-7dd95ae2><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/JavaPlusDoc/" class="home-link router-link-active"><!----> <span class="site-name">Jeskson-微服务分布式</span></a> <div class="links"><div class="color-picker"><a class="color-button"><i class="iconfont reco-color"></i></a> <div class="color-picker-menu" style="display:none;"><div class="mode-options"><h4 class="title">Choose mode</h4> <ul class="color-mode-options"><li class="dark">dark</li><li class="auto active">auto</li><li class="light">light</li></ul></div></div></div> <div class="search-box"><i class="iconfont reco-search"></i> <input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/JavaPlusDoc/" class="nav-link"><i class="undefined"></i>
首页
</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
学习路线
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/" class="nav-link"><i class="undefined"></i>
入门指南
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/basic-grammar/basic-data-type.html" class="nav-link"><i class="undefined"></i>
基础到进阶
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/high-concurrency/why-cache.html" class="nav-link"><i class="undefined"></i>
架构师成长
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
刷题练习
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/" class="nav-link"><i class="undefined"></i>
🎯 题库首页
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/topics/" class="nav-link"><i class="undefined"></i>
📚 专题练习
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/written-exam/" class="nav-link"><i class="undefined"></i>
📝 笔试真题
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/interview/" class="nav-link"><i class="undefined"></i>
💼 面试真题
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/contest/" class="nav-link"><i class="undefined"></i>
🏆 竞赛题库
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/statistics/" class="nav-link"><i class="undefined"></i>
📊 刷题统计
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
技术分类
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/basic-grammar/basic-data-type.html" class="nav-link"><i class="undefined"></i>
Java基础
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/java-up/nginx.html" class="nav-link"><i class="undefined"></i>
Java进阶
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/go/" class="nav-link"><i class="undefined"></i>
GO语言技术
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/iot/" class="nav-link"><i class="undefined"></i>
物联网架构
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/high-concurrency/why-cache.html" class="nav-link"><i class="undefined"></i>
分布式架构
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/worker/1.html" class="nav-link"><i class="undefined"></i>
微服务
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/mysql/mysql.html" class="nav-link"><i class="undefined"></i>
数据库
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/sql/" class="nav-link"><i class="undefined"></i>
SQL专属手册
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/linux/linux.html" class="nav-link"><i class="undefined"></i>
运维与部署
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/docker/docker-tutorial.html" class="nav-link"><i class="undefined"></i>
Docker
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/uniapp/充电宝小程序实现.html" class="nav-link"><i class="undefined"></i>
UniApp小程序
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/products/" class="nav-link"><i class="undefined"></i>
产品系列
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
实战案例
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/worker/1.html" class="nav-link"><i class="undefined"></i>
系统设计
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/high-concurrency/why-cache.html" class="nav-link"><i class="undefined"></i>
性能优化
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/java-up/nginx.html" class="nav-link"><i class="undefined"></i>
项目实践
</a></li><li class="dropdown-item"><!----> <a href="https://1024bibi.com/" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
📝 简历制作工具
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
资源
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="https://webvueblog.github.io/JavaPlusDoc/" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
官方文档
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="https://github.com/webVueBlog/JavaPlusDoc" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
GitHub仓库
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="https://github.com/webVueBlog" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
作者主页
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/wechat-contact-demo.html" class="nav-link"><i class="undefined"></i>
微信联系
</a></li></ul></div></div> <!----></nav></div></header> <div class="sidebar-mask" data-v-7dd95ae2></div> <aside class="sidebar" data-v-7dd95ae2><div class="personal-info-wrapper" data-v-1fad0c41 data-v-7dd95ae2><!----> <!----> <div class="num" data-v-1fad0c41><div data-v-1fad0c41><h3 data-v-1fad0c41>496</h3> <h6 data-v-1fad0c41>文章</h6></div> <div data-v-1fad0c41><h3 data-v-1fad0c41>22</h3> <h6 data-v-1fad0c41>标签</h6></div></div> <ul class="social-links" data-v-1fad0c41></ul> <hr data-v-1fad0c41></div> <nav class="nav-links"><div class="nav-item"><a href="/JavaPlusDoc/" class="nav-link"><i class="undefined"></i>
首页
</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
学习路线
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/" class="nav-link"><i class="undefined"></i>
入门指南
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/basic-grammar/basic-data-type.html" class="nav-link"><i class="undefined"></i>
基础到进阶
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/high-concurrency/why-cache.html" class="nav-link"><i class="undefined"></i>
架构师成长
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
刷题练习
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/" class="nav-link"><i class="undefined"></i>
🎯 题库首页
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/topics/" class="nav-link"><i class="undefined"></i>
📚 专题练习
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/written-exam/" class="nav-link"><i class="undefined"></i>
📝 笔试真题
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/interview/" class="nav-link"><i class="undefined"></i>
💼 面试真题
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/contest/" class="nav-link"><i class="undefined"></i>
🏆 竞赛题库
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/coding-practice/statistics/" class="nav-link"><i class="undefined"></i>
📊 刷题统计
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
技术分类
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/basic-grammar/basic-data-type.html" class="nav-link"><i class="undefined"></i>
Java基础
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/java-up/nginx.html" class="nav-link"><i class="undefined"></i>
Java进阶
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/go/" class="nav-link"><i class="undefined"></i>
GO语言技术
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/iot/" class="nav-link"><i class="undefined"></i>
物联网架构
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/high-concurrency/why-cache.html" class="nav-link"><i class="undefined"></i>
分布式架构
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/worker/1.html" class="nav-link"><i class="undefined"></i>
微服务
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/mysql/mysql.html" class="nav-link"><i class="undefined"></i>
数据库
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/sql/" class="nav-link"><i class="undefined"></i>
SQL专属手册
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/linux/linux.html" class="nav-link"><i class="undefined"></i>
运维与部署
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/docker/docker-tutorial.html" class="nav-link"><i class="undefined"></i>
Docker
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/uniapp/充电宝小程序实现.html" class="nav-link"><i class="undefined"></i>
UniApp小程序
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/products/" class="nav-link"><i class="undefined"></i>
产品系列
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
实战案例
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/worker/1.html" class="nav-link"><i class="undefined"></i>
系统设计
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/high-concurrency/why-cache.html" class="nav-link"><i class="undefined"></i>
性能优化
</a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/java-up/nginx.html" class="nav-link"><i class="undefined"></i>
项目实践
</a></li><li class="dropdown-item"><!----> <a href="https://1024bibi.com/" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
📝 简历制作工具
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="undefined"></i>
资源
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="https://webvueblog.github.io/JavaPlusDoc/" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
官方文档
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="https://github.com/webVueBlog/JavaPlusDoc" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
GitHub仓库
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="https://github.com/webVueBlog" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
作者主页
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="/JavaPlusDoc/wechat-contact-demo.html" class="nav-link"><i class="undefined"></i>
微信联系
</a></li></ul></div></div> <!----></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><a href="/JavaPlusDoc/" class="sidebar-heading clickable router-link-active"><span>文档指南</span> <!----></a> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/" aria-current="page" class="sidebar-link">学前必读</a></li><li><a href="/JavaPlusDoc/encrypted-article.html" class="sidebar-link">加密文章示例</a></li><li><a href="/JavaPlusDoc/plugin-demo.html" class="sidebar-link">插件功能演示</a></li><li><a href="/JavaPlusDoc/share-demo.html" class="sidebar-link">社交分享功能演示</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>后端专属笔记</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading open"><span>达达JAVA基础问答</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/basic/1.html" class="sidebar-link">第1天-第一个程序</a></li><li><a href="/JavaPlusDoc/basic/2.html" class="sidebar-link">第2天-基础语法</a></li><li><a href="/JavaPlusDoc/basic/3.html" class="sidebar-link">第3天-基本概念</a></li><li><a href="/JavaPlusDoc/basic/4.html" class="sidebar-link">第4天-基本数据类型</a></li><li><a href="/JavaPlusDoc/basic/5.html" class="sidebar-link">第5天-变量的声明实例</a></li><li><a href="/JavaPlusDoc/basic/6.html" class="sidebar-link">第6天-变量命名规则</a></li><li><a href="/JavaPlusDoc/basic/7.html" class="sidebar-link">第7天-修饰符</a></li><li><a href="/JavaPlusDoc/basic/8.html" class="sidebar-link">第8天-运算符</a></li><li><a href="/JavaPlusDoc/basic/9.html" class="sidebar-link">第9天-循环结构</a></li><li><a href="/JavaPlusDoc/basic/10.html" class="sidebar-link">第10天-条件语句</a></li><li><a href="/JavaPlusDoc/basic/11.html" class="sidebar-link">第11天-switch-case</a></li><li><a href="/JavaPlusDoc/basic/12.html" class="sidebar-link">第12天-Number-Math类</a></li><li><a href="/JavaPlusDoc/basic/13.html" class="sidebar-link">第13天-Character</a></li><li><a href="/JavaPlusDoc/basic/14.html" class="sidebar-link">第14天-String</a></li><li><a href="/JavaPlusDoc/basic/15.html" class="sidebar-link">第15天-StringBuffer</a></li><li><a href="/JavaPlusDoc/basic/16.html" class="sidebar-link">第16天-数组</a></li><li><a href="/JavaPlusDoc/basic/17.html" class="sidebar-link">第17天-日期时间</a></li><li><a href="/JavaPlusDoc/basic/18.html" class="sidebar-link">第18天-正则表达式</a></li><li><a href="/JavaPlusDoc/basic/19.html" class="sidebar-link">第19天-方法</a></li><li><a href="/JavaPlusDoc/basic/20.html" class="sidebar-link">第20天-构造方法</a></li><li><a href="/JavaPlusDoc/basic/21.html" class="sidebar-link">第21天-流</a></li><li><a href="/JavaPlusDoc/basic/22.html" class="sidebar-link">第22天-异常处理</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>达达JAVA写法思路</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/basic/23.html" class="sidebar-link">第23天-继承的概念</a></li><li><a href="/JavaPlusDoc/basic/24.html" class="sidebar-link">第24天-重写与重载</a></li><li><a href="/JavaPlusDoc/basic/25.html" class="sidebar-link">第25天-多态</a></li><li><a href="/JavaPlusDoc/basic/26.html" class="sidebar-link">第26天-抽象类</a></li><li><a href="/JavaPlusDoc/basic/27.html" class="sidebar-link">第27天-封装</a></li><li><a href="/JavaPlusDoc/basic/28.html" class="sidebar-link">第28天-接口</a></li><li><a href="/JavaPlusDoc/basic/29.html" class="sidebar-link">第29天-枚举</a></li><li><a href="/JavaPlusDoc/basic/30.html" class="sidebar-link">第30天-反射</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>达达JAVA进阶教程</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/basicUp/31.html" class="sidebar-link">第31天-数据结构</a></li><li><a href="/JavaPlusDoc/basicUp/32.html" class="sidebar-link">第32天-集合框架</a></li><li><a href="/JavaPlusDoc/basicUp/33.html" class="sidebar-link">第33天-ArrayList</a></li><li><a href="/JavaPlusDoc/basicUp/34.html" class="sidebar-link">第34天-LinkedList</a></li><li><a href="/JavaPlusDoc/basicUp/35.html" class="sidebar-link">第35天-HashSet</a></li><li><a href="/JavaPlusDoc/basicUp/36.html" class="sidebar-link">第36天-HashMap</a></li><li><a href="/JavaPlusDoc/basicUp/37.html" class="sidebar-link">第37天-Iterator</a></li><li><a href="/JavaPlusDoc/basicUp/38.html" class="sidebar-link">第38天-Object</a></li><li><a href="/JavaPlusDoc/basicUp/39.html" class="sidebar-link">第39天-NIO</a></li><li><a href="/JavaPlusDoc/basicUp/40.html" class="sidebar-link">第40天-泛型</a></li><li><a href="/JavaPlusDoc/basicUp/41.html" class="sidebar-link">第41天-序列化</a></li><li><a href="/JavaPlusDoc/basicUp/42.html" class="sidebar-link">第42天-网络编程</a></li><li><a href="/JavaPlusDoc/basicUp/43.html" class="sidebar-link">第43天-发送邮件</a></li><li><a href="/JavaPlusDoc/basicUp/44.html" class="sidebar-link">第44天-多线程编程</a></li></ul></section></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>刷题练习平台</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/coding-practice/" class="sidebar-link">题库导航</a></li><li><section class="sidebar-group collapsable is-sub-group depth-1"><a href="/JavaPlusDoc/coding-practice/topics/" class="sidebar-heading clickable"><span>📝 专题练习</span> <span class="arrow right"></span></a> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-1"><a href="/JavaPlusDoc/coding-practice/written-exam/" class="sidebar-heading clickable"><span>📝 笔试真题</span> <span class="arrow right"></span></a> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-1"><a href="/JavaPlusDoc/coding-practice/interview/" class="sidebar-heading clickable"><span>💼 面试真题</span> <span class="arrow right"></span></a> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-1"><a href="/JavaPlusDoc/coding-practice/contest/" class="sidebar-heading clickable"><span>🏆 竞赛题库</span> <span class="arrow right"></span></a> <!----></section></li><li><section class="sidebar-group collapsable is-sub-group depth-1"><a href="/JavaPlusDoc/coding-practice/statistics/" class="sidebar-heading clickable"><span>📊 学习统计</span> <span class="arrow right"></span></a> <!----></section></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>SQL专属笔记</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/sql/" class="sidebar-link">手册简介</a></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>基础语法</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/sql/basic/syntax.html" class="sidebar-link">SQL基础语法</a></li><li><a href="/JavaPlusDoc/sql/basic/data-types.html" class="sidebar-link">数据类型</a></li><li><a href="/JavaPlusDoc/sql/basic/constraints.html" class="sidebar-link">约束条件</a></li><li><a href="/JavaPlusDoc/sql/basic/ddl.html" class="sidebar-link">DDL数据定义语言</a></li><li><a href="/JavaPlusDoc/sql/basic/dml.html" class="sidebar-link">DML数据操作语言</a></li><li><a href="/JavaPlusDoc/sql/basic/dql.html" class="sidebar-link">DQL数据查询语言</a></li><li><a href="/JavaPlusDoc/sql/basic/dcl.html" class="sidebar-link">DCL数据控制语言</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>查询操作</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/sql/query/select-basic.html" class="sidebar-link">SELECT查询基础</a></li><li><a href="/JavaPlusDoc/sql/query/where.html" class="sidebar-link">WHERE条件查询</a></li><li><a href="/JavaPlusDoc/sql/query/join.html" class="sidebar-link">JOIN表连接</a></li><li><a href="/JavaPlusDoc/sql/query/subquery.html" class="sidebar-link">子查询</a></li><li><a href="/JavaPlusDoc/sql/query/group-by.html" class="sidebar-link">GROUP BY分组</a></li><li><a href="/JavaPlusDoc/sql/query/order-by.html" class="sidebar-link">ORDER BY排序</a></li><li><a href="/JavaPlusDoc/sql/query/pagination.html" class="sidebar-link">分页查询</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>性能优化</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/sql/perfor/indexr.html" class="sidebar-link">性能优化概述</a></li><li><a href="/JavaPlusDoc/sql/perfor/indexes.html" class="sidebar-link">索引原理与应用</a></li><li><a href="/JavaPlusDoc/sql/perfor/query-optimization.html" class="sidebar-link">查询优化</a></li><li><a href="/JavaPlusDoc/sql/perfor/execution-plans.html" class="sidebar-link">执行计划分析</a></li><li><a href="/JavaPlusDoc/sql/perfor/tuning.html" class="sidebar-link">性能调优</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>高级特性</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/sql/advanced/indexr.html" class="sidebar-link">高级特性概述</a></li><li><a href="/JavaPlusDoc/sql/advanced/transactions.html" class="sidebar-link">事务处理</a></li><li><a href="/JavaPlusDoc/sql/advanced/stored-procedures.html" class="sidebar-link">存储过程与函数</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>函数大全</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/sql/functions/aggregate.html" class="sidebar-link">聚合函数</a></li><li><a href="/JavaPlusDoc/sql/functions/string.html" class="sidebar-link">字符串函数</a></li><li><a href="/JavaPlusDoc/sql/functions/numeric.html" class="sidebar-link">数值函数</a></li><li><a href="/JavaPlusDoc/sql/functions/datetime.html" class="sidebar-link">日期时间函数</a></li><li><a href="/JavaPlusDoc/sql/functions/conditional.html" class="sidebar-link">条件函数</a></li><li><a href="/JavaPlusDoc/sql/functions/window.html" class="sidebar-link">窗口函数</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>实战案例</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/sql/examples/ecommerce.html" class="sidebar-link">电商系统实战</a></li><li><a href="/JavaPlusDoc/sql/examples/analytics.html" class="sidebar-link">数据分析实战</a></li><li><a href="/JavaPlusDoc/sql/examples/reports.html" class="sidebar-link">报表查询实战</a></li><li><a href="/JavaPlusDoc/sql/examples/migration.html" class="sidebar-link">数据迁移实战</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>数据库特定</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/sql/databases/mysql.html" class="sidebar-link">MySQL</a></li><li><a href="/JavaPlusDoc/sql/databases/postgresql.html" class="sidebar-link">PostgreSQL</a></li><li><a href="/JavaPlusDoc/sql/databases/sqlserver.html" class="sidebar-link">SQL Server</a></li><li><a href="/JavaPlusDoc/sql/databases/oracle.html" class="sidebar-link">Oracle</a></li></ul></section></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>UniApp小程序开发</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/uniapp/充电宝小程序实现.html" class="sidebar-link">充电宝小程序实现</a></li><li><a href="/JavaPlusDoc/uniapp/充电桩小程序实现.html" class="sidebar-link">充电桩小程序实现</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Python专属笔记</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading open"><span>Python基础</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/Python/1.html" class="sidebar-link">第1天-Python历史</a></li><li><a href="/JavaPlusDoc/Python/2.html" class="sidebar-link">第2天-安装Python</a></li><li><a href="/JavaPlusDoc/Python/3.html" class="sidebar-link">第3天-第一个程序</a></li><li><a href="/JavaPlusDoc/Python/4.html" class="sidebar-link">第4天-Python基础</a></li><li><a href="/JavaPlusDoc/Python/5.html" class="sidebar-link">第5天-函数</a></li><li><a href="/JavaPlusDoc/Python/6.html" class="sidebar-link">第6天-高级特性</a></li><li><a href="/JavaPlusDoc/Python/7.html" class="sidebar-link">第7天-函数式编程</a></li><li><a href="/JavaPlusDoc/Python/8.html" class="sidebar-link">第8天-模块</a></li><li><a href="/JavaPlusDoc/Python/9.html" class="sidebar-link">第9天-面向对象编程</a></li><li><a href="/JavaPlusDoc/Python/10.html" class="sidebar-link">第10天-高级编程</a></li><li><a href="/JavaPlusDoc/Python/11.html" class="sidebar-link">第11天-错误和调试</a></li><li><a href="/JavaPlusDoc/Python/12.html" class="sidebar-link">第12天-IO编程</a></li><li><a href="/JavaPlusDoc/Python/13.html" class="sidebar-link">第13天-进程和线程</a></li><li><a href="/JavaPlusDoc/Python/14.html" class="sidebar-link">第14天-正则表达式</a></li><li><a href="/JavaPlusDoc/Python/15.html" class="sidebar-link">第15天-常用内建模块</a></li><li><a href="/JavaPlusDoc/Python/16.html" class="sidebar-link">第16天-常用第三方模块</a></li><li><a href="/JavaPlusDoc/Python/17.html" class="sidebar-link">第17天-图形界面</a></li><li><a href="/JavaPlusDoc/Python/18.html" class="sidebar-link">第18天-网络编程</a></li><li><a href="/JavaPlusDoc/Python/19.html" class="sidebar-link">第19天-电子邮件</a></li><li><a href="/JavaPlusDoc/Python/20.html" class="sidebar-link">第20天-访问数据库</a></li><li><a href="/JavaPlusDoc/Python/21.html" class="sidebar-link">第21天-Web开发</a></li><li><a href="/JavaPlusDoc/Python/22.html" class="sidebar-link">第22天-异步IO</a></li></ul></section></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Java核心技术</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading open"><span>基础篇</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/e/JVM深入解析.html" class="sidebar-link">JVM深入解析</a></li><li><a href="/JavaPlusDoc/e/JDK开发工具详解.html" class="sidebar-link">JDK开发工具详解</a></li><li><a href="/JavaPlusDoc/e/Java实战演示.html" class="sidebar-link">Java实战演示</a></li><li><a href="/JavaPlusDoc/basic-grammar/java-jdk-jre-jvm.html" class="sidebar-link">Java、JDK、JRE、JVM详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/basic-data-type.html" class="sidebar-link">Java基本数据类型</a></li><li><a href="/JavaPlusDoc/basic-grammar/type-cast.html" class="sidebar-link">数据类型转换</a></li><li><a href="/JavaPlusDoc/basic-grammar/int-cache.html" class="sidebar-link">数据类型缓存池</a></li><li><a href="/JavaPlusDoc/basic-grammar/operator.html" class="sidebar-link">运算符</a></li><li><a href="/JavaPlusDoc/basic-grammar/flow-control.html" class="sidebar-link">流程控制</a></li><li><a href="/JavaPlusDoc/basic-grammar/string-source.html" class="sidebar-link">String类详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/constant-pool.html" class="sidebar-link">字符串常量池</a></li><li><a href="/JavaPlusDoc/basic-grammar/builder-buffer.html" class="sidebar-link">StringBuilder和Buffer</a></li><li><a href="/JavaPlusDoc/basic-grammar/equals.html" class="sidebar-link">字符串比较</a></li><li><a href="/JavaPlusDoc/basic-grammar/object-class.html" class="sidebar-link">面向对象基础</a></li><li><a href="/JavaPlusDoc/basic-grammar/package.html" class="sidebar-link">Java包机制</a></li><li><a href="/JavaPlusDoc/basic-grammar/var.html" class="sidebar-link">变量与方法</a></li><li><a href="/JavaPlusDoc/basic-grammar/construct.html" class="sidebar-link">构造方法</a></li><li><a href="/JavaPlusDoc/basic-grammar/abstract.html" class="sidebar-link">抽象类</a></li><li><a href="/JavaPlusDoc/basic-grammar/interface.html" class="sidebar-link">接口和内部类</a></li><li><a href="/JavaPlusDoc/basic-grammar/encapsulation-inheritance-polymorphism.html" class="sidebar-link">封装继承多态</a></li><li><a href="/JavaPlusDoc/basic-grammar/this-super.html" class="sidebar-link">this与super关键字</a></li><li><a href="/JavaPlusDoc/basic-grammar/immutable.html" class="sidebar-link">不可变对象</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>集合框架</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/basic-grammar/gailan.html" class="sidebar-link">集合框架概览</a></li><li><a href="/JavaPlusDoc/basic-grammar/arraylist.html" class="sidebar-link">ArrayList详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/linkedlist.html" class="sidebar-link">LinkedList详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/stack.html" class="sidebar-link">栈Stack详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/hashmap.html" class="sidebar-link">HashMap详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/linkedhashmap.html" class="sidebar-link">LinkedHashMap详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/treemap.html" class="sidebar-link">TreeMap详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/ArrayDeque.html" class="sidebar-link">ArrayDeque详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/PriorityQueue.html" class="sidebar-link">PriorityQueue详解</a></li><li><a href="/JavaPlusDoc/basic-grammar/array-linked-list.html" class="sidebar-link">ArrayList vs LinkedList</a></li><li><a href="/JavaPlusDoc/basic-grammar/generic.html" class="sidebar-link">Java泛型</a></li><li><a href="/JavaPlusDoc/basic-grammar/iterator-iterable.html" class="sidebar-link">Iterator和Iterable</a></li><li><a href="/JavaPlusDoc/basic-grammar/fail-fast.html" class="sidebar-link">foreach循环陷阱</a></li><li><a href="/JavaPlusDoc/basic-grammar/comparable-omparator.html" class="sidebar-link">Comparable和Comparator</a></li><li><a href="/JavaPlusDoc/basic-grammar/WeakHashMap.html" class="sidebar-link">WeakHashMap详解</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>JVM与性能</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/aJava/jvm.html" class="sidebar-link">JVM基础</a></li><li><a href="/JavaPlusDoc/aJava/JVM内存区域.html" class="sidebar-link">JVM内存区域</a></li><li><a href="/JavaPlusDoc/aJava/程序计数器.html" class="sidebar-link">程序计数器</a></li><li><a href="/JavaPlusDoc/aJava/线程.html" class="sidebar-link">线程</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>并发编程</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/thread/thread.html" class="sidebar-link">多线程入门</a></li><li><a href="/JavaPlusDoc/thread/callable-future-futuretask.html" class="sidebar-link">线程执行结果获取</a></li><li><a href="/JavaPlusDoc/thread/thread-state-and-method.html" class="sidebar-link">线程的6种状态</a></li><li><a href="/JavaPlusDoc/thread/threadpool-executor.html" class="sidebar-link">深入浅出Java线程池ThreadPoolExecutor</a></li><li><a href="/JavaPlusDoc/jobPro/synchronized.html" class="sidebar-link">synchronized和lock</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>IO与网络</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/java-up/shangtou.html" class="sidebar-link">JavaIO知识体系</a></li><li><a href="/JavaPlusDoc/java-up/file-path.html" class="sidebar-link">文件流</a></li><li><a href="/JavaPlusDoc/java-up/reader-writer.html" class="sidebar-link">字节流与字符流</a></li><li><a href="/JavaPlusDoc/java-up/char-byte.html" class="sidebar-link">转换流</a></li><li><a href="/JavaPlusDoc/java-up/serialize.html" class="sidebar-link">序列化和反序列化</a></li><li><a href="/JavaPlusDoc/nio/nio.html" class="sidebar-link">NIO基础</a></li><li><a href="/JavaPlusDoc/nio/BIONIOAIO.html" class="sidebar-link">NIO vs BIO vs AIO</a></li><li><a href="/JavaPlusDoc/nio/buffer-channel.html" class="sidebar-link">Buffer和Channel</a></li><li><a href="/JavaPlusDoc/nio/network-connect.html" class="sidebar-link">网络编程实践</a></li><li><a href="/JavaPlusDoc/nio/moxing.html" class="sidebar-link">IO模型</a></li><li><a href="/JavaPlusDoc/jobPro/IO.html" class="sidebar-link">IO多路复用</a></li><li><a href="/JavaPlusDoc/java-up/netty.html" class="sidebar-link">Netty入门</a></li><li><a href="/JavaPlusDoc/nio/socket-communication-basics.html" class="sidebar-link">Socket通信基础</a></li><li><a href="/JavaPlusDoc/nio/tcp-udp-programming.html" class="sidebar-link">TCP与UDP编程</a></li><li><a href="/JavaPlusDoc/nio/network-protocols-deep-dive.html" class="sidebar-link">网络协议深入解析</a></li><li><a href="/JavaPlusDoc/nio/nio-netty-framework.html" class="sidebar-link">NIO与Netty框架</a></li><li><a href="/JavaPlusDoc/nio/socket-programming-practice.html" class="sidebar-link">Socket编程实战案例</a></li><li><a href="/JavaPlusDoc/nio/socket-performance-optimization.html" class="sidebar-link">Socket性能优化与调试</a></li></ul></section></li></ul></section></li><li><section class="sidebar-group depth-0"><a href="/JavaPlusDoc/gaobingfaxitong/1" class="sidebar-heading clickable"><span>高并发系统</span> <!----></a> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/gaobingfaxitong/1.html" class="sidebar-link">它的通用设计方法是什么</a></li><li><a href="/JavaPlusDoc/gaobingfaxitong/2.html" class="sidebar-link">架构分层</a></li><li><a href="/JavaPlusDoc/gaobingfaxitong/3.html" class="sidebar-link">如何提升系统性能</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>物联网架构系列</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/iot/" class="sidebar-link">IoT架构概览</a></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>架构分层设计</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/iot/device-layer.html" class="sidebar-link">设备层架构</a></li><li><a href="/JavaPlusDoc/iot/network-layer.html" class="sidebar-link">网络层架构</a></li><li><a href="/JavaPlusDoc/iot/application-layer.html" class="sidebar-link">应用层架构</a></li><li><a href="/JavaPlusDoc/iot/frontend-layer.html" class="sidebar-link">前端展示层</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>设备接入与管理</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/iot/device-access.html" class="sidebar-link">设备接入层</a></li><li><a href="/JavaPlusDoc/iot/device-management-layer.html" class="sidebar-link">设备管理层</a></li><li><a href="/JavaPlusDoc/iot/device-authentication.html" class="sidebar-link">设备认证</a></li><li><a href="/JavaPlusDoc/iot/device-control.html" class="sidebar-link">设备控制</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>协议适配层</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/iot/protocol-adapter-layer.html" class="sidebar-link">协议适配器</a></li><li><a href="/JavaPlusDoc/iot/mqtt-access-layer.html" class="sidebar-link">MQTT接入</a></li><li><a href="/JavaPlusDoc/iot/http-access-layer.html" class="sidebar-link">HTTP接入</a></li><li><a href="/JavaPlusDoc/iot/coap-access-layer.html" class="sidebar-link">CoAP接入</a></li><li><a href="/JavaPlusDoc/iot/tcp-udp-access-layer.html" class="sidebar-link">TCP/UDP接入</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>数据处理与存储</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/iot/data-processing.html" class="sidebar-link">数据处理层</a></li><li><a href="/JavaPlusDoc/iot/data-reception.html" class="sidebar-link">数据接收</a></li><li><a href="/JavaPlusDoc/iot/redis.html" class="sidebar-link">Redis缓存</a></li><li><a href="/JavaPlusDoc/iot/kafka.html" class="sidebar-link">Kafka消息队列</a></li><li><a href="/JavaPlusDoc/iot/cassandra.html" class="sidebar-link">Cassandra存储</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>实战项目</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/iot/practice-projects.html" class="sidebar-link">实践项目案例</a></li><li><a href="/JavaPlusDoc/iot/geofence.html" class="sidebar-link">电子围栏功能设计</a></li><li><a href="/JavaPlusDoc/iot/charging-station-gateway.html" class="sidebar-link">充电桩设备网关</a></li><li><a href="/JavaPlusDoc/iot/netty-gateway-design.html" class="sidebar-link">百万台设备Netty网关架构</a></li><li><a href="/JavaPlusDoc/iot/netty-gateway-design-mi.html" class="sidebar-link">小米实战过亿设备Netty网关架构</a></li><li><a href="/JavaPlusDoc/iot/netty-gateway-bat.html" class="sidebar-link">哈喽电池设备Netty网关架构</a></li><li><a href="/JavaPlusDoc/iot/user-organization-permissions.html" class="sidebar-link">用户组织权限</a></li><li><a href="/JavaPlusDoc/iot/database-storage.html" class="sidebar-link">架构懂了就来了解数据库存储扩展千亿读写</a></li><li><a href="/JavaPlusDoc/iot/mermaid-test.html" class="sidebar-link">Mermaid图表测试</a></li></ul></section></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>GO语言技术</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/go/" class="sidebar-link">GO技术手册导航</a></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>基础语法</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/go/basic-grammar/basic-syntax.html" class="sidebar-link">GO语言基础语法</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>高级特性</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/go/advanced/concurrency.html" class="sidebar-link">并发编程</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>标准库</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/go/stdlib/http.html" class="sidebar-link">HTTP编程</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>最佳实践</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/go/best-practices/testing.html" class="sidebar-link">测试最佳实践</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>实战项目</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/go/projects/web-service.html" class="sidebar-link">Web服务开发实战</a></li></ul></section></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>分布式架构</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading open"><span>缓存系统</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/high-concurrency/why-cache.html" class="sidebar-link">缓存使用场景</a></li><li><a href="/JavaPlusDoc/high-concurrency/redis-single-thread-model.html" class="sidebar-link">Redis vs Memcached</a></li><li><a href="/JavaPlusDoc/high-concurrency/redis-data-types.html" class="sidebar-link">Redis数据类型</a></li><li><a href="/JavaPlusDoc/high-concurrency/redis-expiration-policies-and-lru.html" class="sidebar-link">Redis过期策略</a></li><li><a href="/JavaPlusDoc/high-concurrency/how-to-ensure-high-concurrency-and-high-availability-of-redis.html" class="sidebar-link">Redis高并发与高可用</a></li><li><a href="/JavaPlusDoc/high-concurrency/redis-master-slave.html" class="sidebar-link">Redis主从架构</a></li><li><a href="/JavaPlusDoc/high-concurrency/redis-persistence.html" class="sidebar-link">Redis持久化</a></li><li><a href="/JavaPlusDoc/high-concurrency/redis-sentinel.html" class="sidebar-link">Redis哨兵集群</a></li><li><a href="/JavaPlusDoc/jobPro/redis.html" class="sidebar-link">Redis应用场景</a></li><li><a href="/JavaPlusDoc/redis/redis-key-expiration.html" class="sidebar-link">Redis key过期问题解决方案</a></li><li><a href="/JavaPlusDoc/java-up/redis-springboot.html" class="sidebar-link">SpringBoot整合Redis</a></li><li><a href="/JavaPlusDoc/redis/xuebeng-chuantou-jichuan.html" class="sidebar-link">缓存雪崩、穿透、击穿</a></li><li><a href="/JavaPlusDoc/redis/redis-lua.html" class="sidebar-link">深入分析Redis Lua脚本运行原理</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>消息队列</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/messagequeue/why-mq.html" class="sidebar-link">为什么使用消息队列</a></li><li><a href="/JavaPlusDoc/messagequeue/how-to-ensure-high-availability-of-message-queues.html" class="sidebar-link">消息队列高可用</a></li><li><a href="/JavaPlusDoc/messagequeue/how-to-ensure-that-messages-are-not-repeatedly-consumed.html" class="sidebar-link">消息不重复消费</a></li><li><a href="/JavaPlusDoc/messagequeue/how-to-ensure-the-reliable-transmission-of-messages.html" class="sidebar-link">消息可靠传输</a></li><li><a href="/JavaPlusDoc/messagequeue/how-to-ensure-the-order-of-messages.html" class="sidebar-link">消息顺序性</a></li><li><a href="/JavaPlusDoc/messagequeue/mq-time-delay-and-expired-failure.html" class="sidebar-link">消息队列延时问题</a></li><li><a href="/JavaPlusDoc/messagequeue/mq-design.html" class="sidebar-link">消息队列设计</a></li><li><a href="/JavaPlusDoc/java-up/rabbitmq.html" class="sidebar-link">RabbitMQ入门</a></li><li><a href="/JavaPlusDoc/power/kafka.html" class="sidebar-link">Kafka基础</a></li><li><a href="/JavaPlusDoc/power/kafkas.html" class="sidebar-link">Kafka集群</a></li><li><a href="/JavaPlusDoc/power/comsumer.html" class="sidebar-link">Kafka消费者</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>搜索引擎</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/searchEngine/es-architecture.html" class="sidebar-link">ES分布式架构原理</a></li><li><a href="/JavaPlusDoc/searchEngine/es-write-query-search.html" class="sidebar-link">ES写入数据原理</a></li><li><a href="/JavaPlusDoc/searchEngine/es-optimizing-query-performance.html" class="sidebar-link">ES查询效率优化</a></li><li><a href="/JavaPlusDoc/searchEngine/es-production-cluster.html" class="sidebar-link">ES生产集群部署</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>微服务架构</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/worker/3.html" class="sidebar-link">微服务优雅上下线</a></li><li><a href="/JavaPlusDoc/worker/1.html" class="sidebar-link">滚动部署</a></li><li><a href="/JavaPlusDoc/worker/2.html" class="sidebar-link">Nacos优雅停机</a></li><li><a href="/JavaPlusDoc/dubbo/dubbo.html" class="sidebar-link">Dubbo基础</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>数据库技术</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/mysql/mysql.html" class="sidebar-link">SQL执行过程</a></li><li><a href="/JavaPlusDoc/mysql/shiwu-shixia.html" class="sidebar-link">MySQL事务实现</a></li><li><a href="/JavaPlusDoc/mysql/lijie-shiwu.html" class="sidebar-link">深入理解MySQL事务</a></li><li><a href="/JavaPlusDoc/mysql/mysql-locks.html" class="sidebar-link">MySQL锁机制详解</a></li><li><a href="/JavaPlusDoc/mysql/redis-shuju-yizhixing.html" class="sidebar-link">MySQL和Redis数据一致性</a></li><li><a href="/JavaPlusDoc/jobPro/InnoDB.html" class="sidebar-link">MyISAM vs InnoDB</a></li><li><a href="/JavaPlusDoc/java-up/mongodb.html" class="sidebar-link">MongoDB基础</a></li><li><a href="/JavaPlusDoc/java-up/mongodb-backup-restore.html" class="sidebar-link">MongoDB备份与恢复</a></li><li><a href="/JavaPlusDoc/MyBatis-Plus/getting-started.html" class="sidebar-link">MyBatis-Plus入门</a></li><li><a href="/JavaPlusDoc/MyBatis-Plus/service-interface.html" class="sidebar-link">MyBatis-Plus接口</a></li></ul></section></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>运维与部署</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading open"><span>Docker容器技术</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/docker/docker-tutorial.html" class="sidebar-link">Docker教程</a></li><li><a href="/JavaPlusDoc/docker/docker架构.html" class="sidebar-link">docker架构</a></li><li><a href="/JavaPlusDoc/docker/docker-install.html" class="sidebar-link">Docker安装指南</a></li><li><a href="/JavaPlusDoc/docker/docker-mirror.html" class="sidebar-link">Docker配置国内源</a></li><li><a href="/JavaPlusDoc/docker/docker-images.html" class="sidebar-link">Docker镜像管理</a></li><li><a href="/JavaPlusDoc/docker/docker-containers.html" class="sidebar-link">Docker容器管理</a></li><li><a href="/JavaPlusDoc/docker/docker-network.html" class="sidebar-link">Docker网络配置</a></li><li><a href="/JavaPlusDoc/docker/docker-volumes.html" class="sidebar-link">Docker数据卷管理</a></li><li><a href="/JavaPlusDoc/docker/docker-dockerfile.html" class="sidebar-link">Dockerfile最佳实践</a></li><li><a href="/JavaPlusDoc/docker/docker-compose.html" class="sidebar-link">Docker Compose详解</a></li><li><a href="/JavaPlusDoc/docker/docker-swarm.html" class="sidebar-link">Docker Swarm集群</a></li><li><a href="/JavaPlusDoc/docker/docker-security.html" class="sidebar-link">Docker安全最佳实践</a></li><li><a href="/JavaPlusDoc/docker/docker-production.html" class="sidebar-link">Docker生产环境部署</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>基础设施</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/aJava/设备网关后端设计.html" class="sidebar-link">设备网关后端设计</a></li><li><a href="/JavaPlusDoc/aJava/Redis底层数据结构原理.html" class="sidebar-link">Redis底层数据结构原理</a></li><li><a href="/JavaPlusDoc/aJava/HashMap底层原理.html" class="sidebar-link">HashMap底层原理</a></li><li><a href="/JavaPlusDoc/aJava/MySQL的InnoDB原理.html" class="sidebar-link">MySQL的InnoDB原理</a></li><li><a href="/JavaPlusDoc/aJava/充电桩业务实现.html" class="sidebar-link">充电桩业务实现</a></li><li><a href="/JavaPlusDoc/aJava/充电宝业务实现.html" class="sidebar-link">充电宝业务实现</a></li><li><a href="/JavaPlusDoc/aJava/数据库分片技术实现.html" class="sidebar-link">数据库分片技术实现</a></li><li><a href="/JavaPlusDoc/aJava/Redis分片技术实现.html" class="sidebar-link">Redis分片技术实现</a></li><li><a href="/JavaPlusDoc/aJava/MongoDB分片技术实现.html" class="sidebar-link">MongoDB分片技术实现</a></li><li><a href="/JavaPlusDoc/aJava/Elasticsearch分片技术实现.html" class="sidebar-link">Elasticsearch分片技术实现</a></li><li><a href="/JavaPlusDoc/aJava/HBase分片技术实现.html" class="sidebar-link">HBase分片技术实现</a></li><li><a href="/JavaPlusDoc/aJava/ClickHouse分片技术实现.html" class="sidebar-link">ClickHouse分片技术实现</a></li><li><a href="/JavaPlusDoc/aJava/PostgreSQL分片技术实现.html" class="sidebar-link">PostgreSQL分片技术实现</a></li><li><a href="/JavaPlusDoc/aJava/Oracle分片技术实现.html" class="sidebar-link">Oracle分片技术实现</a></li><li><a href="/JavaPlusDoc/aJava/SQLServer分片技术实现.html" class="sidebar-link">SQLServer分片技术实现</a></li><li><a href="/JavaPlusDoc/aJava/云计算是什么.html" class="sidebar-link">云计算基础</a></li><li><a href="/JavaPlusDoc/aJava/mysql是什么.html" class="sidebar-link">mysql是什么</a></li><li><a href="/JavaPlusDoc/aJava/mogodb是什么.html" class="sidebar-link">mogodb是什么</a></li><li><a href="/JavaPlusDoc/aJava/安全组是什么.html" class="sidebar-link">安全组是什么</a></li><li><a href="/JavaPlusDoc/aJava/子网掩码是什么.html" class="sidebar-link">子网掩码是什么</a></li><li><a href="/JavaPlusDoc/aJava/路由器是什么.html" class="sidebar-link">路由器是什么</a></li><li><a href="/JavaPlusDoc/aJava/交换机是什么.html" class="sidebar-link">交换机是什么</a></li><li><a href="/JavaPlusDoc/aJava/CDN是什么.html" class="sidebar-link">CDN是什么</a></li><li><a href="/JavaPlusDoc/aJava/nginx是什么.html" class="sidebar-link">nginx是什么</a></li><li><a href="/JavaPlusDoc/aJava/tomcat是什么.html" class="sidebar-link">tomcat是什么</a></li><li><a href="/JavaPlusDoc/aJava/Eureka是什么.html" class="sidebar-link">Eureka是什么</a></li><li><a href="/JavaPlusDoc/aJava/nacos是什么.html" class="sidebar-link">nacos是什么</a></li><li><a href="/JavaPlusDoc/aJava/Zookeeper是什么.html" class="sidebar-link">Zookeeper是什么</a></li><li><a href="/JavaPlusDoc/aJava/ElasticSearch是什么.html" class="sidebar-link">ElasticSearch是什么</a></li><li><a href="/JavaPlusDoc/aJava/微服务是什么.html" class="sidebar-link">微服务基础</a></li><li><a href="/JavaPlusDoc/aJava/HDFS是什么.html" class="sidebar-link">HDFS基础</a></li><li><a href="/JavaPlusDoc/aJava/块存储是什么.html" class="sidebar-link">块存储</a></li><li><a href="/JavaPlusDoc/aJava/对象存储是什么.html" class="sidebar-link">对象存储</a></li><li><a href="/JavaPlusDoc/aJava/存储快照是什么.html" class="sidebar-link">存储快照</a></li><li><a href="/JavaPlusDoc/aJava/负载均衡是什么.html" class="sidebar-link">负载均衡</a></li><li><a href="/JavaPlusDoc/aJava/什么是灰度发布.html" class="sidebar-link">灰度发布</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>DevOps工具链</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/aJava/Jenkins是什么.html" class="sidebar-link">Jenkins基础</a></li><li><a href="/JavaPlusDoc/aJava/Ansible是什么.html" class="sidebar-link">Ansible基础</a></li><li><a href="/JavaPlusDoc/aJava/DevOps是什么.html" class="sidebar-link">DevOps概念</a></li><li><a href="/JavaPlusDoc/aJava/WAF和DDOS的区别是什么.html" class="sidebar-link">WAF和DDOS防护</a></li><li><a href="/JavaPlusDoc/linux/linux.html" class="sidebar-link">Linux常用命令</a></li><li><a href="/JavaPlusDoc/linux/nginx-env.html" class="sidebar-link">Nginx环境配置</a></li><li><a href="/JavaPlusDoc/linux/kibana-install.html" class="sidebar-link">Kibana安装与使用</a></li><li><a href="/JavaPlusDoc/java-up/nginx.html" class="sidebar-link">Nginx入门</a></li><li><a href="/JavaPlusDoc/java-up/ssl.html" class="sidebar-link">Nginx SSL配置</a></li><li><a href="/JavaPlusDoc/worker/nginx-optimization.html" class="sidebar-link">Nginx优化与防盗链</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>部署与监控</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/worker/elk.html" class="sidebar-link">ELK日志系统</a></li><li><a href="/JavaPlusDoc/worker/elfk-cluster.html" class="sidebar-link">ELFK生产集群搭建</a></li><li><a href="/JavaPlusDoc/worker/jenkins.html" class="sidebar-link">Jenkins部署SpringBoot</a></li><li><a href="/JavaPlusDoc/worker/rocketmq.html" class="sidebar-link">RocketMQ安装</a></li><li><a href="/JavaPlusDoc/worker/grafana.html" class="sidebar-link">Grafana监控</a></li><li><a href="/JavaPlusDoc/worker/prometheus.html" class="sidebar-link">Prometheus单机部署</a></li><li><a href="/JavaPlusDoc/worker/grafana-database-monitoring.html" class="sidebar-link">Grafana监控MySQL、Redis和MongoDB</a></li><li><a href="/JavaPlusDoc/worker/k8s-monitoring.html" class="sidebar-link">K8s监控</a></li><li><a href="/JavaPlusDoc/worker/cpu-troubleshooting.html" class="sidebar-link">CPU使用率100%异常排查</a></li><li><a href="/JavaPlusDoc/worker/springboot.html" class="sidebar-link">SpringBoot启动脚本</a></li><li><a href="/JavaPlusDoc/worker/skywalking.html" class="sidebar-link">SkyWalking监控</a></li><li><a href="/JavaPlusDoc/worker/7.html" class="sidebar-link">前端自动化部署</a></li><li><a href="/JavaPlusDoc/sre/sre.html" class="sidebar-link">SRE实践</a></li><li><a href="/JavaPlusDoc/sre/monitor.html" class="sidebar-link">分布式监控</a></li><li><a href="/JavaPlusDoc/sre/serviceQuality.html" class="sidebar-link">服务质量目标</a></li><li><a href="/JavaPlusDoc/sre/errorBudget.html" class="sidebar-link">错误预算</a></li><li><a href="/JavaPlusDoc/sre/system.html" class="sidebar-link">系统性能指标</a></li><li><a href="/JavaPlusDoc/sre/server-mining-virus-removal.html" class="sidebar-link">服务器挖矿病毒清除</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>ElasticSearch</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/es/es-architecture.html" class="sidebar-link">ElasticSearch架构</a></li><li><a href="/JavaPlusDoc/es/es-optimizing-query-performance.html" class="sidebar-link">查询性能优化</a></li><li><a href="/JavaPlusDoc/es/es-cluster-setup.html" class="sidebar-link">Linux搭建ES集群与Kibana</a></li></ul></section></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>产品系列</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/products/" class="sidebar-link">产品概述</a></li><li><a href="/JavaPlusDoc/products/product-gallery.html" class="sidebar-link">【溜溜梅】官方商城小程序</a></li><li><a href="/JavaPlusDoc/products/productChange.html" class="sidebar-link">小区充电桩小程序</a></li><li><a href="/JavaPlusDoc/products/photoImage.html" class="sidebar-link">话圈小程序</a></li><li><a href="/JavaPlusDoc/products/changeChange.html" class="sidebar-link">速绿充电小程序体验设计</a></li><li><a href="/JavaPlusDoc/products/changeChange2.html" class="sidebar-link">恒想充充电桩小程序改版设计</a></li><li><a href="/JavaPlusDoc/products/productShare.html" class="sidebar-link">分销小程序</a></li><li><a href="/JavaPlusDoc/products/product-car.html" class="sidebar-link">电动车充电桩小程序</a></li><li><a href="/JavaPlusDoc/products/无人岛商业计划书.html" class="sidebar-link">无人岛商业计划书</a></li><li><a href="/JavaPlusDoc/products/蜗牛睡眠高嵩.html" class="sidebar-link">蜗牛睡眠高嵩</a></li><li><a href="/JavaPlusDoc/products/优质行业报告网站.html" class="sidebar-link">优质行业报告网站</a></li><li><a href="/JavaPlusDoc/products/篮球场如何赚钱.html" class="sidebar-link">篮球场如何赚钱</a></li><li><a href="/JavaPlusDoc/products/enterprise-platform.html" class="sidebar-link">企业级应用平台</a></li><li><a href="/JavaPlusDoc/products/microservice-framework.html" class="sidebar-link">微服务框架</a></li><li><a href="/JavaPlusDoc/products/data-analytics-suite.html" class="sidebar-link">数据分析套件</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>实战案例</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading open"><span>Web应用开发</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/jobPro/login.html" class="sidebar-link">用户注册登录系统</a></li><li><a href="/JavaPlusDoc/jobPro/lan.html" class="sidebar-link">多语言国际化</a></li><li><a href="/JavaPlusDoc/jobPro/jobPro.html" class="sidebar-link">PC网站微信扫码登录</a></li><li><a href="/JavaPlusDoc/jobPro/wechat-miniprogram-guide.html" class="sidebar-link">微信小程序开发完全指南</a></li><li><a href="/JavaPlusDoc/jobPro/wechat-customer-service.html" class="sidebar-link">微信小程序API客服消息</a></li><li><a href="/JavaPlusDoc/jobPro/wechat-open-api.html" class="sidebar-link">微信小程序开放接口</a></li><li><a href="/JavaPlusDoc/jobPro/wechat-operation-center.html" class="sidebar-link">微信小程序运维中心</a></li><li><a href="/JavaPlusDoc/jobPro/appMsg.html" class="sidebar-link">微信小程序消息推送</a></li><li><a href="/JavaPlusDoc/jobPro/miniprogram.html" class="sidebar-link">微信小程序自动化部署</a></li><li><a href="/JavaPlusDoc/jobPro/appPay.html" class="sidebar-link">微信小程序支付功能</a></li><li><a href="/JavaPlusDoc/jobPro/uniapp.html" class="sidebar-link">iOS/Android打包发布</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>GO语言应用</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/go/projects/web-service.html" class="sidebar-link">GO Web服务开发实战</a></li><li><a href="/JavaPlusDoc/go/advanced/concurrency.html" class="sidebar-link">GO并发编程实践</a></li><li><a href="/JavaPlusDoc/go/stdlib/http.html" class="sidebar-link">GO HTTP编程指南</a></li><li><a href="/JavaPlusDoc/go/best-practices/testing.html" class="sidebar-link">GO测试最佳实践</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>技术架构</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/tech/high-availability-group-buying.html" class="sidebar-link">500万日订单下的高可用拼购系统</a></li><li><a href="/JavaPlusDoc/tech/twenty-million-orders-architecture.html" class="sidebar-link">2000万日订单背后的技术架构</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>企业级应用</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/java-up/aop-log.html" class="sidebar-link">SpringAOP实践</a></li><li><a href="/JavaPlusDoc/java-up/ioc.html" class="sidebar-link">SpringIoC实践</a></li><li><a href="/JavaPlusDoc/java-up/transaction.html" class="sidebar-link">事务支持</a></li><li><a href="/JavaPlusDoc/java-up/Filter-Interceptor-Listener.html" class="sidebar-link">过滤器与拦截器</a></li><li><a href="/JavaPlusDoc/java-up/quartz.html" class="sidebar-link">SpringBoot整合Quartz</a></li><li><a href="/JavaPlusDoc/java-up/mybatis.html" class="sidebar-link">SpringBoot整合MyBatis</a></li><li><a href="/JavaPlusDoc/java-up/validator.html" class="sidebar-link">数据校验</a></li><li><a href="/JavaPlusDoc/worker/6.html" class="sidebar-link">API数据加密</a></li><li><a href="/JavaPlusDoc/data/data.html" class="sidebar-link">大数据开发实践</a></li><li><a href="/JavaPlusDoc/order/order-BizOrderService.html" class="sidebar-link">订单流程设计</a></li><li><a href="/JavaPlusDoc/linuxPrometheus/linux.html" class="sidebar-link">数据导入导出优化</a></li></ul></section></li><li><section class="sidebar-group is-sub-group depth-1"><p class="sidebar-heading"><span>物联网应用</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/iot/iot.html" class="sidebar-link">物联网基础</a></li><li><a href="/JavaPlusDoc/iot/kafka.html" class="sidebar-link">物联网Kafka应用</a></li><li><a href="/JavaPlusDoc/iot/redis.html" class="sidebar-link">物联网Redis应用</a></li><li><a href="/JavaPlusDoc/iot/cassandra.html" class="sidebar-link">物联网Cassandra应用</a></li><li><a href="/JavaPlusDoc/iot/server.html" class="sidebar-link">物联网设备管理</a></li><li><a href="/JavaPlusDoc/iot/byteArray.html" class="sidebar-link">字节数组处理</a></li><li><a href="/JavaPlusDoc/iot/iotJob.html" class="sidebar-link">物联网业务流程</a></li><li><a href="/JavaPlusDoc/iot/protocol-adapter-layer.html" class="sidebar-link">协议适配层</a></li><li><a href="/JavaPlusDoc/iot/device-management-layer.html" class="sidebar-link">设备管理层</a></li><li><a href="/JavaPlusDoc/iot/application-service-layer.html" class="sidebar-link">应用服务层</a></li></ul></section></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>Java线程</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/thread/java-multithreading-basics.html" class="sidebar-link">Java多线程基础</a></li><li><a href="/JavaPlusDoc/thread/java-thread-synchronization.html" class="sidebar-link">Java线程同步机制</a></li><li><a href="/JavaPlusDoc/thread/java-concurrent-utilities.html" class="sidebar-link">Java并发工具类</a></li><li><a href="/JavaPlusDoc/thread/java-threadpool-advanced.html" class="sidebar-link">Java线程池深入解析</a></li><li><a href="/JavaPlusDoc/thread/java-memory-model.html" class="sidebar-link">Java内存模型与并发编程</a></li><li><a href="/JavaPlusDoc/thread/java-concurrency-best-practices.html" class="sidebar-link">Java并发编程最佳实践</a></li><li><a href="/JavaPlusDoc/thread/thread-state-and-method.html" class="sidebar-link">线程状态与方法</a></li><li><a href="/JavaPlusDoc/thread/callable-future-futuretask.html" class="sidebar-link">Callable、Future、FutureTask</a></li><li><a href="/JavaPlusDoc/thread/threadpool-executor.html" class="sidebar-link">ThreadPoolExecutor详解</a></li><li><a href="/JavaPlusDoc/aThread/linux.html" class="sidebar-link">linux线程基础</a></li><li><a href="/JavaPlusDoc/aThread/jvm.html" class="sidebar-link">jvm基础知识</a></li><li><a href="/JavaPlusDoc/aThread/jvmThread.html" aria-current="page" class="active sidebar-link">jvm线程</a></li><li><a href="/JavaPlusDoc/aThread/jvmThreadEvent.html" class="sidebar-link">jvm线程通信原理</a></li><li><a href="/JavaPlusDoc/aThread/jvmThreadSync.html" class="sidebar-link">jvm线程同步机制</a></li><li><a href="/JavaPlusDoc/aThread/jvmLock.html" class="sidebar-link">java锁实现原理</a></li><li><a href="/JavaPlusDoc/aThread/jvmAtomic.html" class="sidebar-link">java原子操作类实现原理</a></li><li><a href="/JavaPlusDoc/aThread/jvmConcurrent.html" class="sidebar-link">java并发容器实现原理</a></li><li><a href="/JavaPlusDoc/aThread/javaThreadPool.html" class="sidebar-link">java线程池实现原理</a></li><li><a href="/JavaPlusDoc/aThread/javaThreadPoolUse.html" class="sidebar-link">java线程池使用</a></li><li><a href="/JavaPlusDoc/aThread/javaThreadSkill.html" class="sidebar-link">java多线程编程技巧</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>电商业务交易系统</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/ecommerce/product-management.html" class="sidebar-link">商品管理系统</a></li><li><a href="/JavaPlusDoc/ecommerce/order-management.html" class="sidebar-link">订单管理系统</a></li><li><a href="/JavaPlusDoc/ecommerce/payment-system.html" class="sidebar-link">支付系统设计</a></li><li><a href="/JavaPlusDoc/ecommerce/shopping-cart.html" class="sidebar-link">购物车系统</a></li><li><a href="/JavaPlusDoc/ecommerce/inventory-management.html" class="sidebar-link">库存管理系统</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>跨境电商系统架构</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/ecommerce/cross-border/" class="sidebar-link">系统架构概述</a></li><li><a href="/JavaPlusDoc/ecommerce/cross-border/product-catalog-service.html" class="sidebar-link">商品管理系统</a></li><li><a href="/JavaPlusDoc/ecommerce/cross-border/pricing-engine.html" class="sidebar-link">价格计算引擎</a></li><li><a href="/JavaPlusDoc/ecommerce/cross-border/order-processing-system.html" class="sidebar-link">订单处理系统</a></li><li><a href="/JavaPlusDoc/ecommerce/cross-border/payment-gateway-system.html" class="sidebar-link">支付网关系统</a></li><li><a href="/JavaPlusDoc/ecommerce/cross-border/logistics-delivery-system.html" class="sidebar-link">物流配送系统</a></li><li><a href="/JavaPlusDoc/ecommerce/cross-border/after-sales-service.html" class="sidebar-link">售后服务系统</a></li><li><a href="/JavaPlusDoc/ecommerce/cross-border/user-management-system.html" class="sidebar-link">用户管理与权限系统</a></li><li><a href="/JavaPlusDoc/ecommerce/cross-border/search-recommendation-engine.html" class="sidebar-link">搜索推荐引擎</a></li><li><a href="/JavaPlusDoc/ecommerce/cross-border/shopping-cart-system.html" class="sidebar-link">购物车系统</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>营销系统</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/marketing/coupon-system.html" class="sidebar-link">优惠券系统</a></li><li><a href="/JavaPlusDoc/marketing/flash-sale-system.html" class="sidebar-link">秒杀系统</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>物联网设备接入系统</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/iot/device-access.html" class="sidebar-link">设备接入系统</a></li><li><a href="/JavaPlusDoc/iot/device-management.html" class="sidebar-link">设备管理服务</a></li><li><a href="/JavaPlusDoc/iot/device-authentication.html" class="sidebar-link">设备认证服务</a></li><li><a href="/JavaPlusDoc/iot/data-reception.html" class="sidebar-link">数据接收服务</a></li><li><a href="/JavaPlusDoc/iot/device-control.html" class="sidebar-link">设备控制服务</a></li><li><a href="/JavaPlusDoc/iot/protocol-adapter.html" class="sidebar-link">协议适配器</a></li><li><a href="/JavaPlusDoc/iot/mqtt-access-layer.html" class="sidebar-link">MQTT设备接入层</a></li><li><a href="/JavaPlusDoc/iot/coap-access-layer.html" class="sidebar-link">CoAP设备接入层</a></li><li><a href="/JavaPlusDoc/iot/http-access-layer.html" class="sidebar-link">HTTP设备接入层</a></li><li><a href="/JavaPlusDoc/iot/tcp-udp-access-layer.html" class="sidebar-link">TCP/UDP设备接入层</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>计算机基础</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/JavaPlusDoc/cs/os.html" class="sidebar-link">操作系统</a></li><li><a href="/JavaPlusDoc/cs/wangluo.html" class="sidebar-link">计算机网络</a></li><li><a href="/JavaPlusDoc/cs/tcp-ip.html" class="sidebar-link">TCP/IP协议详解</a></li><li><a href="/JavaPlusDoc/aJava/cookie-session-token.html" class="sidebar-link">Cookie/Session/Token</a></li></ul></section></li></ul> </aside> <div class="password-shadow password-wrapper-in" style="display:none;" data-v-59e6cb88 data-v-7dd95ae2><h3 class="title" data-v-59e6cb88>jvm线程</h3> <!----> <label id="box" class="inputBox" data-v-59e6cb88><input type="password" value="" data-v-59e6cb88> <span data-v-59e6cb88>Konck! Knock!</span> <button data-v-59e6cb88>OK</button></label> <div class="footer" data-v-59e6cb88><span data-v-59e6cb88><i class="iconfont reco-theme" data-v-59e6cb88></i> <a target="blank" href="https://vuepress-theme-reco.recoluan.com" data-v-59e6cb88>vuePress-theme-reco</a></span> <span data-v-59e6cb88><i class="iconfont reco-copyright" data-v-59e6cb88></i> <a data-v-59e6cb88><!---->
<!---->
2025
</a></span></div></div> <div data-v-7dd95ae2><div data-v-7dd95ae2><main class="page"><section style="display:;"><div class="page-title"><h1 class="title">jvm线程</h1> <div data-v-8a445198><i class="iconfont reco-account" data-v-8a445198><span data-v-8a445198>哪吒</span></i> <i class="iconfont reco-date" data-v-8a445198><span data-v-8a445198>2023/6/15</span></i> <!----> <!----></div></div> <div class="theme-reco-content content__default"><h1 id="jvm线程"><a href="#jvm线程" class="header-anchor">#</a> jvm线程</h1> <p>JVM线程是Java并发编程的基础,理解JVM线程的实现原理对于编写高性能、线程安全的Java应用程序至关重要。本文将深入探讨JVM线程的底层实现机制、线程模型、状态管理和调度策略。</p> <h2 id="_1-jvm线程模型概述"><a href="#_1-jvm线程模型概述" class="header-anchor">#</a> 1. JVM线程模型概述</h2> <h3 id="_1-1-线程的定义与重要性"><a href="#_1-1-线程的定义与重要性" class="header-anchor">#</a> 1.1 线程的定义与重要性</h3> <p>在JVM中,线程是程序执行的最小单位,每个线程都有自己的程序计数器、虚拟机栈和本地方法栈,但共享堆内存和方法区。</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ThreadBasicDemo</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// 主线程信息</span>
<span class="token class-name">Thread</span> mainThread <span class="token operator">=</span> <span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"主线程名称: "</span> <span class="token operator">+</span> mainThread<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"主线程ID: "</span> <span class="token operator">+</span> mainThread<span class="token punctuation">.</span><span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"主线程状态: "</span> <span class="token operator">+</span> mainThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"主线程优先级: "</span> <span class="token operator">+</span> mainThread<span class="token punctuation">.</span><span class="token function">getPriority</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 创建新线程</span>
<span class="token class-name">Thread</span> workerThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"工作线程: "</span> <span class="token operator">+</span> <span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"工作线程ID: "</span> <span class="token operator">+</span> <span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"WorkerThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
workerThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
workerThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 等待工作线程完成</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h3 id="_1-2-jvm线程与操作系统线程的关系"><a href="#_1-2-jvm线程与操作系统线程的关系" class="header-anchor">#</a> 1.2 JVM线程与操作系统线程的关系</h3> <p>JVM线程的实现依赖于底层操作系统的线程模型:</p> <ol><li><strong>一对一模型(1:1)</strong>:每个Java线程对应一个操作系统线程</li> <li><strong>多对一模型(N:1)</strong>:多个Java线程映射到一个操作系统线程</li> <li><strong>多对多模型(M:N)</strong>:多个Java线程映射到多个操作系统线程</li></ol> <p>现代JVM主要采用一对一模型,这样可以充分利用多核处理器的优势。</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>management<span class="token punctuation">.</span></span><span class="token class-name">ManagementFactory</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>management<span class="token punctuation">.</span></span><span class="token class-name">ThreadMXBean</span></span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ThreadModelDemo</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">ThreadMXBean</span> threadMXBean <span class="token operator">=</span> <span class="token class-name">ManagementFactory</span><span class="token punctuation">.</span><span class="token function">getThreadMXBean</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"当前JVM中的线程数: "</span> <span class="token operator">+</span> threadMXBean<span class="token punctuation">.</span><span class="token function">getThreadCount</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"峰值线程数: "</span> <span class="token operator">+</span> threadMXBean<span class="token punctuation">.</span><span class="token function">getPeakThreadCount</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"守护线程数: "</span> <span class="token operator">+</span> threadMXBean<span class="token punctuation">.</span><span class="token function">getDaemonThreadCount</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 获取所有线程信息</span>
<span class="token keyword">long</span><span class="token punctuation">[</span><span class="token punctuation">]</span> threadIds <span class="token operator">=</span> threadMXBean<span class="token punctuation">.</span><span class="token function">getAllThreadIds</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">long</span> threadId <span class="token operator">:</span> threadIds<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"线程ID: "</span> <span class="token operator">+</span> threadId <span class="token operator">+</span> <span class="token string">", 线程名: "</span> <span class="token operator">+</span>
threadMXBean<span class="token punctuation">.</span><span class="token function">getThreadInfo</span><span class="token punctuation">(</span>threadId<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getThreadName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h2 id="_2-线程的内存模型"><a href="#_2-线程的内存模型" class="header-anchor">#</a> 2. 线程的内存模型</h2> <h3 id="_2-1-线程私有内存区域"><a href="#_2-1-线程私有内存区域" class="header-anchor">#</a> 2.1 线程私有内存区域</h3> <p>每个线程都有自己的私有内存区域:</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ThreadMemoryDemo</span> <span class="token punctuation">{</span>
<span class="token comment">// 实例变量 - 存储在堆中,线程共享</span>
<span class="token keyword">private</span> <span class="token keyword">int</span> sharedVariable <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">demonstrateThreadMemory</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// 局部变量 - 存储在线程私有的虚拟机栈中</span>
<span class="token keyword">int</span> localVariable <span class="token operator">=</span> <span class="token number">100</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> thread1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token comment">// 每个线程都有自己的局部变量副本</span>
<span class="token keyword">int</span> threadLocal <span class="token operator">=</span> localVariable <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Thread1 - threadLocal: "</span> <span class="token operator">+</span> threadLocal<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 但共享实例变量</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
sharedVariable<span class="token operator">++</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Thread1 - sharedVariable: "</span> <span class="token operator">+</span> sharedVariable<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> thread2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">int</span> threadLocal <span class="token operator">=</span> localVariable <span class="token operator">+</span> <span class="token number">2</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Thread2 - threadLocal: "</span> <span class="token operator">+</span> threadLocal<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
sharedVariable<span class="token operator">++</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Thread2 - sharedVariable: "</span> <span class="token operator">+</span> sharedVariable<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
thread1<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
thread2<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
thread1<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
thread2<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">new</span> <span class="token class-name">ThreadMemoryDemo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">demonstrateThreadMemory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h3 id="_2-2-程序计数器-pc-register"><a href="#_2-2-程序计数器-pc-register" class="header-anchor">#</a> 2.2 程序计数器(PC Register)</h3> <p>程序计数器是线程私有的内存区域,用于存储当前线程正在执行的字节码指令的地址。</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PCRegisterDemo</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Runnable</span> task <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">5</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span>
<span class="token string">" - 执行第 "</span> <span class="token operator">+</span> i <span class="token operator">+</span> <span class="token string">" 次循环"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 每个线程都有自己的程序计数器</span>
<span class="token comment">// 记录当前执行到哪一条字节码指令</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> thread1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span>task<span class="token punctuation">,</span> <span class="token string">"Thread-1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> thread2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span>task<span class="token punctuation">,</span> <span class="token string">"Thread-2"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
thread1<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
thread2<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h3 id="_2-3-虚拟机栈-jvm-stack"><a href="#_2-3-虚拟机栈-jvm-stack" class="header-anchor">#</a> 2.3 虚拟机栈(JVM Stack)</h3> <p>虚拟机栈是线程私有的,用于存储局部变量、操作数栈、动态链接和方法返回地址。</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">JVMStackDemo</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">new</span> <span class="token class-name">JVMStackDemo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">demonstrateStack</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">demonstrateStack</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// 每个方法调用都会在虚拟机栈中创建一个栈帧</span>
<span class="token keyword">int</span> localVar <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span> <span class="token comment">// 局部变量存储在栈帧中</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"方法开始执行,局部变量: "</span> <span class="token operator">+</span> localVar<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 递归调用会在栈中创建多个栈帧</span>
<span class="token function">recursiveMethod</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"方法执行结束"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">recursiveMethod</span><span class="token punctuation">(</span><span class="token keyword">int</span> depth<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>depth <span class="token operator"><=</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// 每次递归调用都会创建新的栈帧</span>
<span class="token keyword">int</span> currentDepth <span class="token operator">=</span> depth<span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"递归深度: "</span> <span class="token operator">+</span> currentDepth <span class="token operator">+</span>
<span class="token string">", 线程: "</span> <span class="token operator">+</span> <span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">recursiveMethod</span><span class="token punctuation">(</span>depth <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h2 id="_3-线程状态与生命周期"><a href="#_3-线程状态与生命周期" class="header-anchor">#</a> 3. 线程状态与生命周期</h2> <h3 id="_3-1-java线程状态"><a href="#_3-1-java线程状态" class="header-anchor">#</a> 3.1 Java线程状态</h3> <p>Java线程有六种状态,定义在Thread.State枚举中:</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>concurrent<span class="token punctuation">.</span></span><span class="token class-name">TimeUnit</span></span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ThreadStateDemo</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">InterruptedException</span> <span class="token punctuation">{</span>
<span class="token comment">// 1. NEW状态 - 线程创建但未启动</span>
<span class="token class-name">Thread</span> newThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"NewThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"创建后的状态: "</span> <span class="token operator">+</span> newThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// NEW</span>
<span class="token comment">// 2. RUNNABLE状态 - 线程正在运行或准备运行</span>
newThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"启动后的状态: "</span> <span class="token operator">+</span> newThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// RUNNABLE</span>
<span class="token comment">// 3. TIMED_WAITING状态 - 线程等待指定时间</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"睡眠中的状态: "</span> <span class="token operator">+</span> newThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// TIMED_WAITING</span>
<span class="token comment">// 4. WAITING状态演示</span>
<span class="token class-name">Object</span> lock <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> waitingThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span>lock<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
lock<span class="token punctuation">.</span><span class="token function">wait</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 进入WAITING状态</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"WaitingThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
waitingThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"等待中的状态: "</span> <span class="token operator">+</span> waitingThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// WAITING</span>
<span class="token comment">// 5. BLOCKED状态演示</span>
<span class="token class-name">Object</span> blockLock <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> blockingThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span>blockLock<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">3000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"BlockingThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> blockedThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span>blockLock<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 尝试获取已被占用的锁</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"获得锁"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"BlockedThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
blockingThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
blockedThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"阻塞中的状态: "</span> <span class="token operator">+</span> blockedThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// BLOCKED</span>
<span class="token comment">// 唤醒等待线程</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span>lock<span class="token punctuation">)</span> <span class="token punctuation">{</span>
lock<span class="token punctuation">.</span><span class="token function">notify</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// 等待所有线程结束</span>
newThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
waitingThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
blockingThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
blockedThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 6. TERMINATED状态 - 线程执行完毕</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"结束后的状态: "</span> <span class="token operator">+</span> newThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// TERMINATED</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h3 id="_3-2-线程状态转换图"><a href="#_3-2-线程状态转换图" class="header-anchor">#</a> 3.2 线程状态转换图</h3> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ThreadStateTransitionDemo</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"=== 线程状态转换演示 ==="</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 创建状态监控线程</span>
<span class="token class-name">Thread</span> monitorThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span> targetThread <span class="token operator">=</span> <span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">isInterrupted</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">500</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"当前状态: "</span> <span class="token operator">+</span> targetThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 创建被监控的线程</span>
<span class="token class-name">Thread</span> targetThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"线程开始执行"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// RUNNABLE -> TIMED_WAITING</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// TIMED_WAITING -> RUNNABLE</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"睡眠结束,继续执行"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 同步块演示</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span><span class="token class-name">ThreadStateTransitionDemo</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"线程执行完毕"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"线程被中断"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"TargetThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 启动监控</span>
monitorThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"目标线程创建后状态: "</span> <span class="token operator">+</span> targetThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
targetThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
targetThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"目标线程结束后状态: "</span> <span class="token operator">+</span> targetThread<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">finally</span> <span class="token punctuation">{</span>
monitorThread<span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h2 id="_4-线程调度机制"><a href="#_4-线程调度机制" class="header-anchor">#</a> 4. 线程调度机制</h2> <h3 id="_4-1-线程优先级"><a href="#_4-1-线程优先级" class="header-anchor">#</a> 4.1 线程优先级</h3> <p>JVM使用线程优先级来影响线程调度,但具体的调度策略依赖于操作系统。</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ThreadPriorityDemo</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"=== 线程优先级演示 ==="</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 创建不同优先级的线程</span>
<span class="token class-name">Thread</span> lowPriorityThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">10</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"低优先级线程: "</span> <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"LowPriorityThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> normalPriorityThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">10</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"普通优先级线程: "</span> <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"NormalPriorityThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> highPriorityThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">10</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"高优先级线程: "</span> <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"HighPriorityThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置优先级</span>
lowPriorityThread<span class="token punctuation">.</span><span class="token function">setPriority</span><span class="token punctuation">(</span><span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token constant">MIN_PRIORITY</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1</span>
normalPriorityThread<span class="token punctuation">.</span><span class="token function">setPriority</span><span class="token punctuation">(</span><span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token constant">NORM_PRIORITY</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 5</span>
highPriorityThread<span class="token punctuation">.</span><span class="token function">setPriority</span><span class="token punctuation">(</span><span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token constant">MAX_PRIORITY</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 10</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"低优先级: "</span> <span class="token operator">+</span> lowPriorityThread<span class="token punctuation">.</span><span class="token function">getPriority</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"普通优先级: "</span> <span class="token operator">+</span> normalPriorityThread<span class="token punctuation">.</span><span class="token function">getPriority</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"高优先级: "</span> <span class="token operator">+</span> highPriorityThread<span class="token punctuation">.</span><span class="token function">getPriority</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 启动线程</span>
lowPriorityThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
normalPriorityThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
highPriorityThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
lowPriorityThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
normalPriorityThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
highPriorityThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h3 id="_4-2-线程调度策略"><a href="#_4-2-线程调度策略" class="header-anchor">#</a> 4.2 线程调度策略</h3> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>concurrent<span class="token punctuation">.</span></span><span class="token class-name">Executors</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>concurrent<span class="token punctuation">.</span></span><span class="token class-name">ScheduledExecutorService</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>concurrent<span class="token punctuation">.</span></span><span class="token class-name">TimeUnit</span></span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ThreadSchedulingDemo</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"=== 线程调度策略演示 ==="</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 1. 抢占式调度演示</span>
<span class="token function">demonstratePreemptiveScheduling</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 2. 时间片轮转演示</span>
<span class="token function">demonstrateTimeSlicing</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 3. 协作式调度演示</span>
<span class="token function">demonstrateCooperativeScheduling</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// 抢占式调度</span>
<span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">demonstratePreemptiveScheduling</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"\n--- 抢占式调度 ---"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> cpuIntensiveThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">long</span> startTime <span class="token operator">=</span> <span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">currentTimeMillis</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">currentTimeMillis</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span> startTime <span class="token operator"><</span> <span class="token number">2000</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// CPU密集型任务</span>
<span class="token class-name">Math</span><span class="token punctuation">.</span><span class="token function">sqrt</span><span class="token punctuation">(</span><span class="token class-name">Math</span><span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"CPU密集型线程完成"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"CPUIntensiveThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> ioThread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">5</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"IO线程执行: "</span> <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 模拟IO操作</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"IOThread"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
cpuIntensiveThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
ioThread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
cpuIntensiveThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
ioThread<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token comment">// 时间片轮转</span>
<span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">demonstrateTimeSlicing</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"\n--- 时间片轮转 ---"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">3</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">final</span> <span class="token keyword">int</span> threadId <span class="token operator">=</span> i<span class="token punctuation">;</span>
<span class="token class-name">Thread</span> thread <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> j <span class="token operator"><</span> <span class="token number">10</span><span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"线程"</span> <span class="token operator">+</span> threadId <span class="token operator">+</span> <span class="token string">" - 执行"</span> <span class="token operator">+</span> j<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 主动让出CPU,模拟时间片结束</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token keyword">yield</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"Thread-"</span> <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span>
thread<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token comment">// 协作式调度</span>
<span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">demonstrateCooperativeScheduling</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"\n--- 协作式调度 ---"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Object</span> lock <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> producer <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span>lock<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">5</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"生产者生产: "</span> <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span>
lock<span class="token punctuation">.</span><span class="token function">notify</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 通知消费者</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator"><</span> <span class="token number">4</span><span class="token punctuation">)</span> lock<span class="token punctuation">.</span><span class="token function">wait</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 等待消费者</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"Producer"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Thread</span> consumer <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{</span>
<span class="token keyword">synchronized</span> <span class="token punctuation">(</span>lock<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">5</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
lock<span class="token punctuation">.</span><span class="token function">wait</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 等待生产者</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"消费者消费: "</span> <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span>
lock<span class="token punctuation">.</span><span class="token function">notify</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 通知生产者</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"Consumer"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
producer<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
consumer<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
producer<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
consumer<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InterruptedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">currentThread</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">interrupt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div></div></section> <footer class="page-edit"><!----> <!----></footer> <div class="page-nav"><p class="inner"><span class="prev"><a href="/JavaPlusDoc/aThread/jvm.html" class="prev">
jvm基础知识
</a></span> <span class="next"><a href="/JavaPlusDoc/aThread/jvmThreadEvent.html">
jvm线程通信原理
</a></span></p></div> <div class="comments-wrapper"><!----></div></main></div> <!----></div> <ul class="sub-sidebar sub-sidebar-wrapper" style="width:12rem;" data-v-b57cc07c data-v-7dd95ae2><li class="level-2" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_1-jvm线程模型概述" class="sidebar-link reco-side-_1-jvm线程模型概述" data-v-b57cc07c>1. JVM线程模型概述</a></li><li class="level-3" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_1-1-线程的定义与重要性" class="sidebar-link reco-side-_1-1-线程的定义与重要性" data-v-b57cc07c>1.1 线程的定义与重要性</a></li><li class="level-3" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_1-2-jvm线程与操作系统线程的关系" class="sidebar-link reco-side-_1-2-jvm线程与操作系统线程的关系" data-v-b57cc07c>1.2 JVM线程与操作系统线程的关系</a></li><li class="level-2" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_2-线程的内存模型" class="sidebar-link reco-side-_2-线程的内存模型" data-v-b57cc07c>2. 线程的内存模型</a></li><li class="level-3" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_2-1-线程私有内存区域" class="sidebar-link reco-side-_2-1-线程私有内存区域" data-v-b57cc07c>2.1 线程私有内存区域</a></li><li class="level-3" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_2-2-程序计数器-pc-register" class="sidebar-link reco-side-_2-2-程序计数器-pc-register" data-v-b57cc07c>2.2 程序计数器(PC Register)</a></li><li class="level-3" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_2-3-虚拟机栈-jvm-stack" class="sidebar-link reco-side-_2-3-虚拟机栈-jvm-stack" data-v-b57cc07c>2.3 虚拟机栈(JVM Stack)</a></li><li class="level-2" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_3-线程状态与生命周期" class="sidebar-link reco-side-_3-线程状态与生命周期" data-v-b57cc07c>3. 线程状态与生命周期</a></li><li class="level-3" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_3-1-java线程状态" class="sidebar-link reco-side-_3-1-java线程状态" data-v-b57cc07c>3.1 Java线程状态</a></li><li class="level-3" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_3-2-线程状态转换图" class="sidebar-link reco-side-_3-2-线程状态转换图" data-v-b57cc07c>3.2 线程状态转换图</a></li><li class="level-2" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_4-线程调度机制" class="sidebar-link reco-side-_4-线程调度机制" data-v-b57cc07c>4. 线程调度机制</a></li><li class="level-3" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_4-1-线程优先级" class="sidebar-link reco-side-_4-1-线程优先级" data-v-b57cc07c>4.1 线程优先级</a></li><li class="level-3" data-v-b57cc07c><a href="/JavaPlusDoc/aThread/jvmThread.html#_4-2-线程调度策略" class="sidebar-link reco-side-_4-2-线程调度策略" data-v-b57cc07c>4.2 线程调度策略</a></li></ul></div></div></div><div class="global-ui"><div class="back-to-ceiling" style="right:1rem;bottom:6rem;width:2.5rem;height:2.5rem;border-radius:.25rem;line-height:2.5rem;display:none;" data-v-c6073ba8 data-v-c6073ba8><svg t="1574745035067" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5404" class="icon" data-v-c6073ba8><path d="M526.60727968 10.90185116a27.675 27.675 0 0 0-29.21455937 0c-131.36607665 82.28402758-218.69155461 228.01873535-218.69155402 394.07834331a462.20625001 462.20625001 0 0 0 5.36959153 69.94390903c1.00431239 6.55289093-0.34802892 13.13561351-3.76865779 18.80351572-32.63518765 54.11355614-51.75690182 118.55860487-51.7569018 187.94566865a371.06718723 371.06718723 0 0 0 11.50484808 91.98906777c6.53300375 25.50556257 41.68394495 28.14064038 52.69160883 4.22606766 17.37162448-37.73630017 42.14135425-72.50938081 72.80769204-103.21549295 2.18761121 3.04276886 4.15646224 6.24463696 6.40373557 9.22774369a1871.4375 1871.4375 0 0 0 140.04691725 5.34970492 1866.36093723 1866.36093723 0 0 0 140.04691723-5.34970492c2.24727335-2.98310674 4.21612437-6.18497483 6.3937923-9.2178004 30.66633723 30.70611158 55.4360664 65.4791928 72.80769147 103.21549355 11.00766384 23.91457269 46.15860503 21.27949489 52.69160879-4.22606768a371.15156223 371.15156223 0 0 0 11.514792-91.99901164c0-69.36717486-19.13165746-133.82216804-51.75690182-187.92578088-3.42062944-5.66790279-4.76302748-12.26056868-3.76865837-18.80351632a462.20625001 462.20625001 0 0 0 5.36959269-69.943909c-0.00994388-166.08943902-87.32547796-311.81420293-218.6915546-394.09823051zM605.93803103 357.87693858a93.93749974 93.93749974 0 1 1-187.89594924 6.1e-7 93.93749974 93.93749974 0 0 1 187.89594924-6.1e-7z" p-id="5405" data-v-c6073ba8></path><path d="M429.50777625 765.63860547C429.50777625 803.39355007 466.44236686 1000.39046097 512.00932183 1000.39046097c45.56695499 0 82.4922232-197.00623328 82.5015456-234.7518555 0-37.75494459-36.9345906-68.35043303-82.4922232-68.34111062-45.57627738-0.00932239-82.52019037 30.59548842-82.51086798 68.34111062z" p-id="5406" data-v-c6073ba8></path></svg></div><!----><div></div><div class="kanbanniang" data-v-5775ee02><div class="banniang-container" style="display:;" data-v-5775ee02><div class="messageBox" style="right:68px;bottom:190px;display:none;" data-v-5775ee02>
欢迎来到 Jeskson-微服务分布式
</div> <div class="operation" style="right:90px;bottom:40px;display:none;" data-v-5775ee02><i class="kbnfont kbn-ban-home ban-home" data-v-5775ee02></i> <i class="kbnfont kbn-ban-message message" data-v-5775ee02></i> <i class="kbnfont kbn-ban-close close" data-v-5775ee02></i> <a target="_blank" href="https://vuepress-theme-reco.recoluan.com/views/plugins/kanbanniang.html" data-v-5775ee02><i class="kbnfont kbn-ban-info info" data-v-5775ee02></i></a> <i class="kbnfont kbn-ban-theme skin" style="display:none;" data-v-5775ee02></i></div> <canvas id="banniang" width="150" height="260" class="live2d" style="width:100px;position:fixed;right:0px;bottom:0px;opacity:0.9;z-index:99999;object-fit:cover;" data-v-5775ee02></canvas></div> <div class="showBanNiang" style="display:none;" data-v-5775ee02>
看板娘
</div></div></div></div>
<script src="/JavaPlusDoc/assets/js/app.ff4b1912.js" defer></script><script src="/JavaPlusDoc/assets/js/7.dfc0397a.js" defer></script><script src="/JavaPlusDoc/assets/js/2.cfbace72.js" defer></script><script src="/JavaPlusDoc/assets/js/1.d59a348b.js" defer></script><script src="/JavaPlusDoc/assets/js/199.724aa135.js" defer></script>
</body>
</html>