import{_ as l}from"./plugin-vue_export-helper.21dcd24c.js";import{r as n,o as h,c as t,a as e,b as r,e as o,d as a}from"./app.36bfa2ec.js";const d={},c=o('

Java \u5E76\u53D1\u7F16\u7A0B\u516B\u80A1\u6587\uFF08\u80CC\u8BF5\u7248\uFF09\u5FC5\u770B\u{1F44D}

\u7B80\u8FF0Java\u5185\u5B58\u6A21\u578B\uFF08JMM\uFF09

Java\u5185\u5B58\u6A21\u578B\u5B9A\u4E49\u4E86\u7A0B\u5E8F\u4E2D\u5404\u79CD\u53D8\u91CF\u7684\u8BBF\u95EE\u89C4\u5219\uFF1A

\u7B80\u8FF0as-if-serial

\u7F16\u8BD1\u5668\u4F1A\u5BF9\u539F\u59CB\u7684\u7A0B\u5E8F\u8FDB\u884C\u6307\u4EE4\u91CD\u6392\u5E8F\u548C\u4F18\u5316\u3002\u4F46\u4E0D\u7BA1\u600E\u4E48\u91CD\u6392\u5E8F\uFF0C\u5176\u7ED3\u679C\u90FD\u5FC5\u987B\u548C\u7528\u6237\u539F\u59CB\u7A0B\u5E8F\u8F93\u51FA\u7684\u9884\u5B9A\u7ED3\u679C\u4FDD\u6301\u4E00\u81F4\u3002

\u7B80\u8FF0happens-before\u516B\u5927\u89C4\u5219

as-if-serial \u548C happens-before \u7684\u533A\u522B

as-if-serial \u4FDD\u8BC1\u5355\u7EBF\u7A0B\u7A0B\u5E8F\u7684\u6267\u884C\u7ED3\u679C\u4E0D\u53D8\uFF0Chappens-before \u4FDD\u8BC1\u6B63\u786E\u540C\u6B65\u7684\u591A\u7EBF\u7A0B\u7A0B\u5E8F\u7684\u6267\u884C\u7ED3\u679C\u4E0D\u53D8\u3002

\u7B80\u8FF0\u539F\u5B50\u6027\u64CD\u4F5C

\u4E00\u4E2A\u64CD\u4F5C\u6216\u8005\u591A\u4E2A\u64CD\u4F5C\uFF0C\u8981\u4E48\u5168\u90E8\u6267\u884C\u5E76\u4E14\u6267\u884C\u7684\u8FC7\u7A0B\u4E0D\u4F1A\u88AB\u4EFB\u4F55\u56E0\u7D20\u6253\u65AD\uFF0C\u8981\u4E48\u5C31\u90FD\u4E0D\u6267\u884C\uFF0C\u8FD9\u5C31\u662F\u539F\u5B50\u6027\u64CD\u4F5C\u3002

\u7B80\u8FF0\u7EBF\u7A0B\u7684\u53EF\u89C1\u6027

\u53EF\u89C1\u6027\u6307\u5F53\u4E00\u4E2A\u7EBF\u7A0B\u4FEE\u6539\u4E86\u5171\u4EAB\u53D8\u91CF\u65F6\uFF0C\u5176\u4ED6\u7EBF\u7A0B\u80FD\u591F\u7ACB\u5373\u5F97\u77E5\u4FEE\u6539\u3002volatile\u3001synchronized\u3001final \u5173\u952E\u5B57\u90FD\u80FD\u4FDD\u8BC1\u53EF\u89C1\u6027\u3002

\u7B80\u8FF0\u6709\u5E8F\u6027

\u867D\u7136\u591A\u7EBF\u7A0B\u5B58\u5728\u5E76\u53D1\u548C\u6307\u4EE4\u4F18\u5316\u7B49\u64CD\u4F5C\uFF0C\u4F46\u5728\u672C\u7EBF\u7A0B\u5185\u89C2\u5BDF\u8BE5\u7EBF\u7A0B\u7684\u6240\u6709\u6267\u884C\u64CD\u4F5C\u662F\u6709\u5E8F\u7684\u3002

\u7B80\u8FF0Java\u4E2Dvolatile\u5173\u952E\u5B57\u4F5C\u7528

Java\u7EBF\u7A0B\u7684\u5B9E\u73B0\u65B9\u5F0F

\u7B80\u8FF0Java\u7EBF\u7A0B\u7684\u72B6\u6001

\u7EBF\u7A0B\u72B6\u6001\u6709 NEW\u3001RUNNABLE\u3001BLOCK\u3001WAITING\u3001TIMED_WAITING\u3001THERMINATED

\u7B80\u8FF0\u7EBF\u7A0B\u901A\u4FE1\u7684\u65B9\u5F0F

\u7B80\u8FF0\u7EBF\u7A0B\u6C60

\u6CA1\u6709\u7EBF\u7A0B\u6C60\u7684\u60C5\u51B5\u4E0B\uFF0C\u591A\u6B21\u521B\u5EFA\uFF0C\u9500\u6BC1\u7EBF\u7A0B\u5F00\u9500\u6BD4\u8F83\u5927\u3002\u5982\u679C\u5728\u5F00\u8F9F\u7684\u7EBF\u7A0B\u6267\u884C\u5B8C\u5F53\u524D\u4EFB\u52A1\u540E\u590D\u7528\u5DF2\u521B\u5EFA\u7684\u7EBF\u7A0B\uFF0C\u53EF\u4EE5\u964D\u4F4E\u5F00\u9500\u3001\u63A7\u5236\u6700\u5927\u5E76\u53D1\u6570\u3002

\u7EBF\u7A0B\u6C60\u521B\u5EFA\u7EBF\u7A0B\u65F6\uFF0C\u4F1A\u5C06\u7EBF\u7A0B\u5C01\u88C5\u6210\u5DE5\u4F5C\u7EBF\u7A0B Worker\uFF0CWorker \u5728\u6267\u884C\u5B8C\u4EFB\u52A1\u540E\u8FD8\u4F1A\u5FAA\u73AF\u83B7\u53D6\u5DE5\u4F5C\u961F\u5217\u4E2D\u7684\u4EFB\u52A1\u6765\u6267\u884C\u3002

\u5C06\u4EFB\u52A1\u6D3E\u53D1\u7ED9\u7EBF\u7A0B\u6C60\u65F6\uFF0C\u4F1A\u51FA\u73B0\u4EE5\u4E0B\u51E0\u79CD\u60C5\u51B5

\u7EBF\u7A0B\u6C60\u53C2\u6570\uFF1A

\u62D2\u7EDD\u7B56\u7565\u6709\u4EE5\u4E0B\u51E0\u79CD\uFF1A

\u7B80\u8FF0Executor\u6846\u67B6

Executor\u6846\u67B6\u76EE\u7684\u662F\u5C06\u4EFB\u52A1\u63D0\u4EA4\u548C\u4EFB\u52A1\u5982\u4F55\u8FD0\u884C\u5206\u79BB\u5F00\u6765\u7684\u673A\u5236\u3002\u7528\u6237\u4E0D\u518D\u9700\u8981\u4ECE\u4EE3\u7801\u5C42\u8003\u8651\u8BBE\u8BA1\u4EFB\u52A1\u7684\u63D0\u4EA4\u8FD0\u884C\uFF0C\u53EA\u9700\u8981\u8C03\u7528Executor\u6846\u67B6\u5B9E\u73B0\u7C7B\u7684Execute\u65B9\u6CD5\u5C31\u53EF\u4EE5\u63D0\u4EA4\u4EFB\u52A1\u3002

\u7B80\u8FF0Executor\u7684\u7EE7\u627F\u5173\u7CFB

\u7B80\u8FF0\u7EBF\u7A0B\u6C60\u7684\u72B6\u6001

\u7B80\u8FF0\u7EBF\u7A0B\u6C60\u7C7B\u578B

\u7B80\u8FF0\u963B\u585E\u961F\u5217

\u963B\u585E\u961F\u5217\u662F\u751F\u4EA7\u8005\u6D88\u8D39\u8005\u7684\u5B9E\u73B0\u5177\u4F53\u7EC4\u4EF6\u4E4B\u4E00\u3002\u5F53\u963B\u585E\u961F\u5217\u4E3A\u7A7A\u65F6\uFF0C\u4ECE\u961F\u5217\u4E2D\u83B7\u53D6\u5143\u7D20\u7684\u64CD\u4F5C\u5C06\u4F1A\u88AB\u963B\u585E\uFF0C\u5F53\u963B\u585E\u961F\u5217\u6EE1\u4E86\uFF0C\u5F80\u961F\u5217\u6DFB\u52A0\u5143\u7D20\u7684\u64CD\u4F5C\u5C06\u4F1A\u88AB\u963B\u585E\u3002\u5177\u4F53\u5B9E\u73B0\u6709\uFF1A

\u8C08\u4E00\u8C08ThreadLocal

ThreadLocal \u662F\u7EBF\u7A0B\u5171\u4EAB\u53D8\u91CF\u3002ThreadLoacl \u6709\u4E00\u4E2A\u9759\u6001\u5185\u90E8\u7C7B ThreadLocalMap\uFF0C\u5176 Key \u662F ThreadLocal \u5BF9\u8C61\uFF0C\u503C\u662F Entry \u5BF9\u8C61\uFF0CThreadLocalMap\u662F\u6BCF\u4E2A\u7EBF\u7A0B\u79C1\u6709\u7684\u3002

\u5B58\u5728\u7684\u95EE\u9898\uFF1A\u5BF9\u4E8E\u7EBF\u7A0B\u6C60\uFF0C\u7531\u4E8E\u7EBF\u7A0B\u6C60\u4F1A\u91CD\u7528 Thread \u5BF9\u8C61\uFF0C\u56E0\u6B64\u4E0E Thread \u7ED1\u5B9A\u7684 ThreadLocal \u4E5F\u4F1A\u88AB\u91CD\u7528\uFF0C\u9020\u6210\u4E00\u7CFB\u5217\u95EE\u9898\u3002

\u6BD4\u5982\u8BF4\u5185\u5B58\u6CC4\u6F0F\u3002\u7531\u4E8E ThreadLocal \u662F\u5F31\u5F15\u7528\uFF0C\u4F46 Entry \u7684 value \u662F\u5F3A\u5F15\u7528\uFF0C\u56E0\u6B64\u5F53 ThreadLocal \u88AB\u5783\u573E\u56DE\u6536\u540E\uFF0Cvalue \u4F9D\u65E7\u4E0D\u4F1A\u88AB\u91CA\u653E\uFF0C\u4EA7\u751F\u5185\u5B58\u6CC4\u6F0F\u3002

\u804A\u804A\u4F60\u5BF9Java\u5E76\u53D1\u5305\u4E0Bunsafe\u7C7B\u7684\u7406\u89E3

\u5BF9\u4E8E Java \u8BED\u8A00\uFF0C\u6CA1\u6709\u76F4\u63A5\u7684\u6307\u9488\u7EC4\u4EF6\uFF0C\u4E00\u822C\u4E5F\u4E0D\u80FD\u4F7F\u7528\u504F\u79FB\u91CF\u5BF9\u67D0\u5757\u5185\u5B58\u8FDB\u884C\u64CD\u4F5C\u3002\u8FD9\u4E9B\u64CD\u4F5C\u76F8\u5BF9\u6765\u8BB2\u662F\u5B89\u5168\uFF08safe\uFF09\u7684\u3002

Java \u6709\u4E2A\u7C7B\u53EB Unsafe \u7C7B\uFF0C\u8FD9\u4E2A\u7C7B\u4F7F Java \u62E5\u6709\u4E86\u50CF C \u8BED\u8A00\u7684\u6307\u9488\u4E00\u6837\u64CD\u4F5C\u5185\u5B58\u7A7A\u95F4\u7684\u80FD\u529B\uFF0C\u540C\u65F6\u4E5F\u5E26\u6765\u4E86\u6307\u9488\u7684\u95EE\u9898\u3002\u8FD9\u4E2A\u7C7B\u53EF\u4EE5\u8BF4\u662F Java \u5E76\u53D1\u5F00\u53D1\u7684\u57FA\u7840\u3002

Java\u4E2D\u7684\u4E50\u89C2\u9501\u4E0ECAS\u7B97\u6CD5

\u4E50\u89C2\u9501\u8BA4\u4E3A\u6570\u636E\u53D1\u9001\u65F6\u53D1\u751F\u5E76\u53D1\u51B2\u7A81\u7684\u6982\u7387\u4E0D\u5927\uFF0C\u6240\u4EE5\u8BFB\u64CD\u4F5C\u524D\u4E0D\u4E0A\u9501\u3002

\u5230\u4E86\u5199\u64CD\u4F5C\u65F6\u624D\u4F1A\u8FDB\u884C\u5224\u65AD\uFF0C\u6570\u636E\u5728\u6B64\u671F\u95F4\u662F\u5426\u88AB\u5176\u4ED6\u7EBF\u7A0B\u4FEE\u6539\u3002\u5982\u679C\u53D1\u751F\u4FEE\u6539\uFF0C\u90A3\u5C31\u8FD4\u56DE\u5199\u5165\u5931\u8D25\uFF1B\u5982\u679C\u6CA1\u6709\u88AB\u4FEE\u6539\uFF0C\u90A3\u5C31\u6267\u884C\u4FEE\u6539\u64CD\u4F5C\uFF0C\u8FD4\u56DE\u4FEE\u6539\u6210\u529F\u3002

\u4E50\u89C2\u9501\u4E00\u822C\u90FD\u91C7\u7528 Compare And Swap\uFF08CAS\uFF09\u7B97\u6CD5\u8FDB\u884C\u5B9E\u73B0\u3002\u987E\u540D\u601D\u4E49\uFF0C\u8BE5\u7B97\u6CD5\u6D89\u53CA\u5230\u4E86\u4E24\u4E2A\u64CD\u4F5C\uFF0C\u6BD4\u8F83\uFF08Compare\uFF09\u548C\u4EA4\u6362\uFF08Swap\uFF09\u3002

CAS \u7B97\u6CD5\u7684\u601D\u8DEF\u5982\u4E0B\uFF1A

ABA\u95EE\u9898\u53CA\u89E3\u51B3\u65B9\u6CD5\u7B80\u8FF0

CAS \u7B97\u6CD5\u662F\u57FA\u4E8E\u503C\u6765\u505A\u6BD4\u8F83\u7684\uFF0C\u5982\u679C\u5F53\u524D\u6709\u4E24\u4E2A\u7EBF\u7A0B\uFF0C\u4E00\u4E2A\u7EBF\u7A0B\u5C06\u53D8\u91CF\u503C\u4ECE A \u6539\u4E3A B \uFF0C\u518D\u7531 B \u6539\u56DE\u4E3A A \uFF0C\u5F53\u524D\u7EBF\u7A0B\u5F00\u59CB\u6267\u884C CAS \u7B97\u6CD5\u65F6\uFF0C\u5C31\u5F88\u5BB9\u6613\u8BA4\u4E3A\u503C\u6CA1\u6709\u53D8\u5316\uFF0C\u8BEF\u8BA4\u4E3A\u8BFB\u53D6\u6570\u636E\u5230\u6267\u884C CAS \u7B97\u6CD5\u7684\u671F\u95F4\uFF0C\u6CA1\u6709\u7EBF\u7A0B\u4FEE\u6539\u8FC7\u6570\u636E\u3002

juc \u5305\u63D0\u4F9B\u4E86\u4E00\u4E2A AtomicStampedReference\uFF0C\u5373\u5728\u539F\u59CB\u7684\u7248\u672C\u4E0B\u52A0\u5165\u7248\u672C\u53F7\u6233\uFF0C\u89E3\u51B3 ABA \u95EE\u9898\u3002

\u7B80\u8FF0\u5E38\u89C1\u7684Atomic\u7C7B

\u5728\u5F88\u591A\u65F6\u5019\uFF0C\u6211\u4EEC\u9700\u8981\u7684\u4EC5\u4EC5\u662F\u4E00\u4E2A\u7B80\u5355\u7684\u3001\u9AD8\u6548\u7684\u3001\u7EBF\u7A0B\u5B89\u5168\u7684++\u6216\u8005--\u65B9\u6848\uFF0C\u4F7F\u7528synchronized\u5173\u952E\u5B57\u548Clock\u56FA\u7136\u53EF\u4EE5\u5B9E\u73B0\uFF0C\u4F46\u4EE3\u4EF7\u6BD4\u8F83\u5927\uFF0C\u6B64\u65F6\u7528\u539F\u5B50\u7C7B\u66F4\u52A0\u65B9\u4FBF\u3002\u57FA\u672C\u6570\u636E\u7C7B\u578B\u7684\u539F\u5B50\u7C7B\u6709\uFF1A

Atomic\u6570\u7EC4\u7C7B\u578B\u6709\uFF1A

Atomic\u5F15\u7528\u7C7B\u578B\u6709\uFF1A

FieldUpdater\u7C7B\u578B\uFF1A

\u7B80\u8FF0Atomic\u7C7B\u57FA\u672C\u5B9E\u73B0\u539F\u7406

\u4EE5AtomicIntger \u4E3A\u4F8B\u3002

\u65B9\u6CD5getAndIncrement\uFF0C\u4EE5\u539F\u5B50\u65B9\u5F0F\u5C06\u5F53\u524D\u7684\u503C\u52A01\uFF0C\u5177\u4F53\u5B9E\u73B0\u4E3A\uFF1A

\u7B80\u8FF0CountDownLatch

CountDownLatch\u8FD9\u4E2A\u7C7B\u4F7F\u4E00\u4E2A\u7EBF\u7A0B\u7B49\u5F85\u5176\u4ED6\u7EBF\u7A0B\u5404\u81EA\u6267\u884C\u5B8C\u6BD5\u540E\u518D\u6267\u884C\u3002\u662F\u901A\u8FC7\u4E00\u4E2A\u8BA1\u6570\u5668\u6765\u5B9E\u73B0\u7684\uFF0C\u8BA1\u6570\u5668\u7684\u521D\u59CB\u503C\u662F\u7EBF\u7A0B\u7684\u6570\u91CF\u3002\u6BCF\u5F53\u4E00\u4E2A\u7EBF\u7A0B\u6267\u884C\u5B8C\u6BD5\u540E\uFF0C\u8C03\u7528countDown\u65B9\u6CD5\uFF0C\u8BA1\u6570\u5668\u7684\u503C\u5C31\u51CF1\uFF0C\u5F53\u8BA1\u6570\u5668\u7684\u503C\u4E3A0\u65F6\uFF0C\u8868\u793A\u6240\u6709\u7EBF\u7A0B\u90FD\u6267\u884C\u5B8C\u6BD5\uFF0C\u7136\u540E\u5728\u7B49\u5F85\u7684\u7EBF\u7A0B\u5C31\u53EF\u4EE5\u6062\u590D\u5DE5\u4F5C\u4E86\u3002\u53EA\u80FD\u4E00\u6B21\u6027\u4F7F\u7528\uFF0C\u4E0D\u80FDreset\u3002

\u7B80\u8FF0CyclicBarrier

CyclicBarrier \u4E3B\u8981\u529F\u80FD\u548CCountDownLatch\u7C7B\u4F3C\uFF0C\u4E5F\u662F\u901A\u8FC7\u4E00\u4E2A\u8BA1\u6570\u5668\uFF0C\u4F7F\u4E00\u4E2A\u7EBF\u7A0B\u7B49\u5F85\u5176\u4ED6\u7EBF\u7A0B\u5404\u81EA\u6267\u884C\u5B8C\u6BD5\u540E\u518D\u6267\u884C\u3002\u4F46\u662F\u5176\u53EF\u4EE5\u91CD\u590D\u4F7F\u7528\uFF08reset\uFF09\u3002

\u7B80\u8FF0Semaphore

Semaphore\u5373\u4FE1\u53F7\u91CF\u3002Semaphore \u7684\u6784\u9020\u65B9\u6CD5\u53C2\u6570\u63A5\u6536\u4E00\u4E2A int \u503C\uFF0C\u8BBE\u7F6E\u4E00\u4E2A\u8BA1\u6570\u5668\uFF0C\u8868\u793A\u53EF\u7528\u7684\u8BB8\u53EF\u6570\u91CF\u5373\u6700\u5927\u5E76\u53D1\u6570\u3002\u4F7F\u7528 acquire \u65B9\u6CD5\u83B7\u5F97\u4E00\u4E2A\u8BB8\u53EF\u8BC1\uFF0C\u8BA1\u6570\u5668\u51CF\u4E00\uFF0C\u4F7F\u7528 release \u65B9\u6CD5\u5F52\u8FD8\u8BB8\u53EF\uFF0C\u8BA1\u6570\u5668\u52A0\u4E00\u3002\u5982\u679C\u6B64\u65F6\u8BA1\u6570\u5668\u503C\u4E3A0\uFF0C\u7EBF\u7A0B\u8FDB\u5165\u4F11\u7720\u3002

\u7B80\u8FF0Exchanger

Exchanger\u7C7B\u53EF\u7528\u4E8E\u4E24\u4E2A\u7EBF\u7A0B\u4E4B\u95F4\u4EA4\u6362\u4FE1\u606F\u3002\u53EF\u7B80\u5355\u5730\u5C06Exchanger\u5BF9\u8C61\u7406\u89E3\u4E3A\u4E00\u4E2A\u5305\u542B\u4E24\u4E2A\u683C\u5B50\u7684\u5BB9\u5668\uFF0C\u901A\u8FC7exchanger\u65B9\u6CD5\u53EF\u4EE5\u5411\u4E24\u4E2A\u683C\u5B50\u4E2D\u586B\u5145\u4FE1\u606F\u3002\u7EBF\u7A0B\u901A\u8FC7exchange \u65B9\u6CD5\u4EA4\u6362\u6570\u636E\uFF0C\u7B2C\u4E00\u4E2A\u7EBF\u7A0B\u6267\u884C exchange \u65B9\u6CD5\u540E\u4F1A\u963B\u585E\u7B49\u5F85\u7B2C\u4E8C\u4E2A\u7EBF\u7A0B\u6267\u884C\u8BE5\u65B9\u6CD5\u3002\u5F53\u4E24\u4E2A\u7EBF\u7A0B\u90FD\u5230\u8FBE\u540C\u6B65\u70B9\u65F6\u8FD9\u4E24\u4E2A\u7EBF\u7A0B\u5C31\u53EF\u4EE5\u4EA4\u6362\u6570\u636E\u5F53\u4E24\u4E2A\u683C\u5B50\u4E2D\u7684\u5747\u88AB\u586B\u5145\u65F6\uFF0C\u8BE5\u5BF9\u8C61\u4F1A\u81EA\u52A8\u5C06\u4E24\u4E2A\u683C\u5B50\u7684\u4FE1\u606F\u4EA4\u6362\uFF0C\u7136\u540E\u8FD4\u56DE\u7ED9\u7EBF\u7A0B\uFF0C\u4ECE\u800C\u5B9E\u73B0\u4E24\u4E2A\u7EBF\u7A0B\u7684\u4FE1\u606F\u4EA4\u6362\u3002

\u7B80\u8FF0ConcurrentHashMap

JDK7\u91C7\u7528\u9501\u5206\u6BB5\u6280\u672F\u3002\u9996\u5148\u5C06\u6570\u636E\u5206\u6210 Segment \u6570\u636E\u6BB5\uFF0C\u7136\u540E\u7ED9\u6BCF\u4E00\u4E2A\u6570\u636E\u6BB5\u914D\u4E00\u628A\u9501\uFF0C\u5F53\u4E00\u4E2A\u7EBF\u7A0B\u5360\u7528\u9501\u8BBF\u95EE\u5176\u4E2D\u4E00\u4E2A\u6BB5\u7684\u6570\u636E\u65F6\uFF0C\u5176\u4ED6\u6BB5\u7684\u6570\u636E\u4E5F\u80FD\u88AB\u5176\u4ED6\u7EBF\u7A0B\u8BBF\u95EE\u3002

get \u9664\u8BFB\u5230\u7A7A\u503C\u4E0D\u9700\u8981\u52A0\u9501\u3002\u8BE5\u65B9\u6CD5\u5148\u7ECF\u8FC7\u4E00\u6B21\u518D\u6563\u5217\uFF0C\u518D\u7528\u8FD9\u4E2A\u6563\u5217\u503C\u901A\u8FC7\u6563\u5217\u8FD0\u7B97\u5B9A\u4F4D\u5230 Segment\uFF0C\u6700\u540E\u901A\u8FC7\u6563\u5217\u7B97\u6CD5\u5B9A\u4F4D\u5230\u5143\u7D20\u3002put \u987B\u52A0\u9501\uFF0C\u9996\u5148\u5B9A\u4F4D\u5230 Segment\uFF0C\u7136\u540E\u8FDB\u884C\u63D2\u5165\u64CD\u4F5C\uFF0C\u7B2C\u4E00\u6B65\u5224\u65AD\u662F\u5426\u9700\u8981\u5BF9 Segment \u91CC\u7684 HashEntry \u6570\u7EC4\u8FDB\u884C\u6269\u5BB9\uFF0C\u7B2C\u4E8C\u6B65\u5B9A\u4F4D\u6DFB\u52A0\u5143\u7D20\u7684\u4F4D\u7F6E\uFF0C\u7136\u540E\u5C06\u5176\u653E\u5165\u6570\u7EC4\u3002

JDK8\u7684\u6539\u8FDB

synchronized\u5E95\u5C42\u5B9E\u73B0\u539F\u7406

Java \u5BF9\u8C61\u5E95\u5C42\u90FD\u4F1A\u5173\u8054\u4E00\u4E2A monitor\uFF0C\u4F7F\u7528 synchronized \u65F6 JVM \u4F1A\u6839\u636E\u4F7F\u7528\u73AF\u5883\u627E\u5230\u5BF9\u8C61\u7684 monitor\uFF0C\u6839\u636E monitor \u7684\u72B6\u6001\u8FDB\u884C\u52A0\u89E3\u9501\u7684\u5224\u65AD\u3002\u5982\u679C\u6210\u529F\u52A0\u9501\u5C31\u6210\u4E3A\u8BE5 monitor \u7684\u552F\u4E00\u6301\u6709\u8005\uFF0Cmonitor \u5728\u88AB\u91CA\u653E\u524D\u4E0D\u80FD\u518D\u88AB\u5176\u4ED6\u7EBF\u7A0B\u83B7\u53D6\u3002

synchronized\u5728JVM\u7F16\u8BD1\u540E\u4F1A\u4EA7\u751Fmonitorenter \u548C monitorexit \u8FD9\u4E24\u4E2A\u5B57\u8282\u7801\u6307\u4EE4\uFF0C\u83B7\u53D6\u548C\u91CA\u653E monitor\u3002\u8FD9\u4E24\u4E2A\u5B57\u8282\u7801\u6307\u4EE4\u90FD\u9700\u8981\u4E00\u4E2A\u5F15\u7528\u7C7B\u578B\u7684\u53C2\u6570\u6307\u660E\u8981\u9501\u5B9A\u548C\u89E3\u9501\u7684\u5BF9\u8C61\uFF0C\u5BF9\u4E8E\u540C\u6B65\u666E\u901A\u65B9\u6CD5\uFF0C\u9501\u662F\u5F53\u524D\u5B9E\u4F8B\u5BF9\u8C61\uFF1B\u5BF9\u4E8E\u9759\u6001\u540C\u6B65\u65B9\u6CD5\uFF0C\u9501\u662F\u5F53\u524D\u7C7B\u7684 Class \u5BF9\u8C61\uFF1B\u5BF9\u4E8E\u540C\u6B65\u65B9\u6CD5\u5757\uFF0C\u9501\u662F synchronized \u62EC\u53F7\u91CC\u7684\u5BF9\u8C61\u3002

\u6267\u884C monitorenter \u6307\u4EE4\u65F6\uFF0C\u9996\u5148\u5C1D\u8BD5\u83B7\u53D6\u5BF9\u8C61\u9501\u3002\u5982\u679C\u8FD9\u4E2A\u5BF9\u8C61\u6CA1\u6709\u88AB\u9501\u5B9A\uFF0C\u6216\u5F53\u524D\u7EBF\u7A0B\u5DF2\u7ECF\u6301\u6709\u9501\uFF0C\u5C31\u628A\u9501\u7684\u8BA1\u6570\u5668\u52A0 1\uFF0C\u6267\u884C monitorexit \u6307\u4EE4\u65F6\u4F1A\u5C06\u9501\u8BA1\u6570\u5668\u51CF 1\u3002\u4E00\u65E6\u8BA1\u6570\u5668\u4E3A 0 \u9501\u968F\u5373\u5C31\u88AB\u91CA\u653E\u3002

synchronized\u5173\u952E\u8BCD\u4F7F\u7528\u65B9\u6CD5

\u7B80\u8FF0Java\u504F\u5411\u9501

JDK 1.6 \u4E2D\u63D0\u51FA\u4E86\u504F\u5411\u9501\u7684\u6982\u5FF5\u3002\u8BE5\u9501\u63D0\u51FA\u7684\u539F\u56E0\u662F\uFF0C\u5F00\u53D1\u8005\u53D1\u73B0\u591A\u6570\u60C5\u51B5\u4E0B\u9501\u5E76\u4E0D\u5B58\u5728\u7ADE\u4E89\uFF0C\u4E00\u628A\u9501\u5F80\u5F80\u662F\u7531\u540C\u4E00\u4E2A\u7EBF\u7A0B\u83B7\u5F97\u7684\u3002\u504F\u5411\u9501\u5E76\u4E0D\u4F1A\u4E3B\u52A8\u91CA\u653E\uFF0C\u8FD9\u6837\u6BCF\u6B21\u504F\u5411\u9501\u8FDB\u5165\u7684\u65F6\u5019\u90FD\u4F1A\u5224\u65AD\u8BE5\u8D44\u6E90\u662F\u5426\u662F\u504F\u5411\u81EA\u5DF1\u7684\uFF0C\u5982\u679C\u662F\u504F\u5411\u81EA\u5DF1\u7684\u5219\u4E0D\u9700\u8981\u8FDB\u884C\u989D\u5916\u7684\u64CD\u4F5C\uFF0C\u76F4\u63A5\u53EF\u4EE5\u8FDB\u5165\u540C\u6B65\u64CD\u4F5C\u3002

\u5176\u7533\u8BF7\u6D41\u7A0B\u4E3A\uFF1A

\u7B80\u8FF0\u8F7B\u91CF\u7EA7\u9501

\u8F7B\u91CF\u7EA7\u9501\u662F\u4E3A\u4E86\u5728\u6CA1\u6709\u7ADE\u4E89\u7684\u524D\u63D0\u4E0B\u51CF\u5C11\u91CD\u91CF\u7EA7\u9501\u51FA\u73B0\u5E76\u5BFC\u81F4\u7684\u6027\u80FD\u6D88\u8017\u3002

\u5176\u7533\u8BF7\u6D41\u7A0B\u4E3A\uFF1A

\u7B80\u8FF0\u9501\u4F18\u5316\u7B56\u7565

\u5373\u81EA\u9002\u5E94\u81EA\u65CB\u3001\u9501\u6D88\u9664\u3001\u9501\u7C97\u5316\u3001\u9501\u5347\u7EA7\u7B49\u7B56\u7565\u504F\u3002

\u7B80\u8FF0Java\u7684\u81EA\u65CB\u9501

\u7EBF\u7A0B\u83B7\u53D6\u9501\u5931\u8D25\u540E\uFF0C\u53EF\u4EE5\u91C7\u7528\u8FD9\u6837\u7684\u7B56\u7565\uFF0C\u53EF\u4EE5\u4E0D\u653E\u5F03 CPU \uFF0C\u4E0D\u505C\u7684\u91CD\u8BD5\u5185\u91CD\u8BD5\uFF0C\u8FD9\u79CD\u64CD\u4F5C\u4E5F\u79F0\u4E3A\u81EA\u65CB\u9501\u3002

\u7B80\u8FF0\u81EA\u9002\u5E94\u81EA\u65CB\u9501

\u81EA\u9002\u5E94\u81EA\u65CB\u9501\u81EA\u65CB\u6B21\u6570\u4E0D\u518D\u4EBA\u4E3A\u8BBE\u5B9A\uFF0C\u901A\u5E38\u7531\u524D\u4E00\u6B21\u5728\u540C\u4E00\u4E2A\u9501\u4E0A\u7684\u81EA\u65CB\u65F6\u95F4\u53CA\u9501\u7684\u62E5\u6709\u8005\u7684\u72B6\u6001\u51B3\u5B9A\u3002

\u7B80\u8FF0\u9501\u7C97\u5316

\u9501\u7C97\u5316\u7684\u601D\u60F3\u5C31\u662F\u6269\u5927\u52A0\u9501\u8303\u56F4\uFF0C\u907F\u514D\u53CD\u590D\u7684\u52A0\u9501\u548C\u89E3\u9501\u3002

\u7B80\u8FF0\u9501\u6D88\u9664

\u9501\u6D88\u9664\u662F\u4E00\u79CD\u66F4\u4E3A\u5F7B\u5E95\u7684\u4F18\u5316\uFF0C\u5728\u7F16\u8BD1\u65F6\uFF0CJava\u7F16\u8BD1\u5668\u5BF9\u8FD0\u884C\u4E0A\u4E0B\u6587\u8FDB\u884C\u626B\u63CF\uFF0C\u53BB\u9664\u4E0D\u53EF\u80FD\u5B58\u5728\u5171\u4EAB\u8D44\u6E90\u7ADE\u4E89\u7684\u9501\u3002

\u7B80\u8FF0Lock\u4E0EReentrantLock

Lock\u63A5\u53E3\u662F Java\u5E76\u53D1\u5305\u7684\u9876\u5C42\u63A5\u53E3\u3002

\u53EF\u91CD\u5165\u9501 ReentrantLock \u662F Lock \u6700\u5E38\u89C1\u7684\u5B9E\u73B0\uFF0C\u4E0E synchronized \u4E00\u6837\u53EF\u91CD\u5165\u3002ReentrantLock \u5728\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u662F\u975E\u516C\u5E73\u7684\uFF0C\u53EF\u4EE5\u901A\u8FC7\u6784\u9020\u65B9\u6CD5\u6307\u5B9A\u516C\u5E73\u9501\u3002\u4E00\u65E6\u4F7F\u7528\u4E86\u516C\u5E73\u9501\uFF0C\u6027\u80FD\u4F1A\u4E0B\u964D\u3002

\u7B80\u8FF0AQS

AQS\uFF08AbstractQuenedSynchronizer\uFF09\u62BD\u8C61\u7684\u961F\u5217\u5F0F\u540C\u6B65\u5668\u3002AQS\u662F\u5C06\u6BCF\u4E00\u6761\u8BF7\u6C42\u5171\u4EAB\u8D44\u6E90\u7684\u7EBF\u7A0B\u5C01\u88C5\u6210\u4E00\u4E2A\u9501\u961F\u5217\u7684\u4E00\u4E2A\u7ED3\u70B9\uFF08Node\uFF09\uFF0C\u6765\u5B9E\u73B0\u9501\u7684\u5206\u914D\u3002AQS\u662F\u7528\u6765\u6784\u5EFA\u9501\u6216\u5176\u4ED6\u540C\u6B65\u7EC4\u4EF6\u7684\u57FA\u7840\u6846\u67B6\uFF0C\u5B83\u4F7F\u7528\u4E00\u4E2A volatile int state \u53D8\u91CF\u4F5C\u4E3A\u5171\u4EAB\u8D44\u6E90\uFF0C\u5982\u679C\u7EBF\u7A0B\u83B7\u53D6\u8D44\u6E90\u5931\u8D25\uFF0C\u5219\u8FDB\u5165\u540C\u6B65\u961F\u5217\u7B49\u5F85\uFF1B\u5982\u679C\u83B7\u53D6\u6210\u529F\u5C31\u6267\u884C\u4E34\u754C\u533A\u4EE3\u7801\uFF0C\u91CA\u653E\u8D44\u6E90\u65F6\u4F1A\u901A\u77E5\u540C\u6B65\u961F\u5217\u4E2D\u7684\u7B49\u5F85\u7EBF\u7A0B\u3002

\u5B50\u7C7B\u901A\u8FC7\u7EE7\u627F\u540C\u6B65\u5668\u5E76\u5B9E\u73B0\u5B83\u7684\u62BD\u8C61\u65B9\u6CD5getState\u3001setState \u548C compareAndSetState\u5BF9\u540C\u6B65\u72B6\u6001\u8FDB\u884C\u66F4\u6539\u3002

AQS\u83B7\u53D6\u72EC\u5360\u9501/\u91CA\u653E\u72EC\u5360\u9501\u539F\u7406\uFF1A

\u83B7\u53D6\uFF1A\uFF08acquire\uFF09

\u91CA\u653E\uFF1A\uFF08release\uFF09

AQS\u83B7\u53D6\u5171\u4EAB\u9501/\u91CA\u653E\u5171\u4EAB\u9501\u539F\u7406

\u83B7\u53D6\u9501\uFF08acquireShared\uFF09


',127),s=a("\u6295\u7A3F\u4F5C\u8005\uFF1A\u540E\u7AEF\u6280\u672F\u5C0F\u725B\u8BF4 \u8F6C\u8F7D\u94FE\u63A5\uFF1A"),u={href:"https://mp.weixin.qq.com/s/PmeH38qWVxyIhBpsAsjG7w",target:"_blank",rel:"noopener noreferrer"},p=a("https://mp.weixin.qq.com/s/PmeH38qWVxyIhBpsAsjG7w"),x=e("hr",null,null,-1),m=a("\u6700\u8FD1\u6574\u7406\u4E86\u4E00\u4EFD\u725B\u903C\u7684\u5B66\u4E60\u8D44\u6599\uFF0C\u5305\u62EC\u4F46\u4E0D\u9650\u4E8EJava\u57FA\u7840\u90E8\u5206\uFF08JVM\u3001Java\u96C6\u5408\u6846\u67B6\u3001\u591A\u7EBF\u7A0B\uFF09\uFF0C\u8FD8\u56CA\u62EC\u4E86 "),f=e("strong",null,"\u6570\u636E\u5E93\u3001\u8BA1\u7B97\u673A\u7F51\u7EDC\u3001\u7B97\u6CD5\u4E0E\u6570\u636E\u7ED3\u6784\u3001\u8BBE\u8BA1\u6A21\u5F0F\u3001\u6846\u67B6\u7C7BSpring\u3001Netty\u3001\u5FAE\u670D\u52A1\uFF08Dubbo\uFF0C\u6D88\u606F\u961F\u5217\uFF09 \u7F51\u5173",-1),b=a(" \u7B49\u7B49\u7B49\u7B49\u2026\u2026\u8BE6\u60C5\u6233\uFF1A"),A={href:"https://tobebetterjavaer.com/pdf/programmer-111.html",target:"_blank",rel:"noopener noreferrer"},v=a("\u53EF\u4EE5\u8BF4\u662F2022\u5E74\u5168\u7F51\u6700\u5168\u7684\u5B66\u4E60\u548C\u627E\u5DE5\u4F5C\u7684PDF\u8D44\u6E90\u4E86"),S=e("p",null,[a("\u5173\u6CE8\u4E8C\u54E5\u7684\u539F\u521B\u516C\u4F17\u53F7 "),e("strong",null,"\u6C89\u9ED8\u738B\u4E8C"),a("\uFF0C\u56DE\u590D"),e("strong",null,"111"),a(" \u5373\u53EF\u514D\u8D39\u9886\u53D6\u3002")],-1),g=e("p",null,[e("img",{src:"http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png",alt:""})],-1);function E(T,y){const i=n("ExternalLinkIcon");return h(),t("div",null,[c,e("p",null,[s,e("a",u,[p,r(i)])]),x,e("p",null,[m,f,b,e("a",A,[v,r(i)])]),S,g])}var L=l(d,[["render",E],["__file","java-thread-baguwen.html.vue"]]);export{L as default};