From dffc5dd94adb84487e2236ec099e20505790e95a Mon Sep 17 00:00:00 2001 From: guide Date: Thu, 4 Aug 2022 21:00:03 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20update]Java=E5=B9=B6=E5=8F=91=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=86=85=E5=AE=B9=E9=87=8D=E6=9E=84=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- docs/.vuepress/sidebar.ts | 2 +- .../operating-system-basic-questions-01.md | 1 + docs/database/mysql/mysql-questions-01.md | 1 + .../redis/redis-data-structures-01.md | 1 + .../redis/redis-data-structures-02.md | 1 + docs/database/redis/redis-questions-01.md | 1 + docs/database/redis/redis-questions-02.md | 1 + docs/high-performance/load-balancing.md | 1 + .../message-queue/rabbitmq-questions.md | 1 + docs/java/basis/java-basic-questions-01.md | 1 + docs/java/basis/java-basic-questions-02.md | 1 + docs/java/basis/java-basic-questions-03.md | 1 + docs/java/basis/spi.md | 1 + .../java-collection-questions-01.md | 3 +- .../java-collection-questions-02.md | 1 + docs/java/concurrent/aqs.md | 4 +- .../synchronized-get-lock-code-block.drawio | 2 +- .../synchronized-get-lock-code-block.jpg | Bin 0 -> 22290 bytes .../synchronized-get-lock-code-block.png | Bin 22053 -> 0 bytes .../synchronized-release-lock-block.drawio | 2 +- .../synchronized-release-lock-block.jpg | Bin 0 -> 21285 bytes .../synchronized-release-lock-block.png | Bin 21840 -> 0 bytes .../thread-local-inner-class.png} | Bin .../threadlocal-data-structure.drawio | 1 + .../threadlocal-data-structure.jpg | Bin 0 -> 23319 bytes .../threadlocal-data-structure.png | Bin 0 -> 80830 bytes .../images/jmm/cpu-cache-protocol.drawio | 1 + .../images/jmm/cpu-cache-protocol.jpg | Bin 0 -> 31337 bytes .../cpu-cache.drawio | 0 .../cpu-cache.png | Bin .../{interview-questions => jmm}/jmm.drawio | 0 .../{interview-questions => jmm}/jmm.png | Bin .../{interview-questions => jmm}/jmm2.drawio | 0 .../{interview-questions => jmm}/jmm2.png | Bin .../images/threadlocal数据结构.png | Bin 41231 -> 0 bytes .../java-concurrent-questions-01.md | 1 + .../java-concurrent-questions-02.md | 300 ++++++++++-------- .../java-concurrent-questions-03.md | 1 + docs/java/concurrent/jmm.md | 232 ++++++++++++++ docs/java/concurrent/threadlocal.md | 2 +- 41 files changed, 428 insertions(+), 141 deletions(-) create mode 100644 docs/java/concurrent/images/interview-questions/synchronized-get-lock-code-block.jpg delete mode 100644 docs/java/concurrent/images/interview-questions/synchronized-get-lock-code-block.png create mode 100644 docs/java/concurrent/images/interview-questions/synchronized-release-lock-block.jpg delete mode 100644 docs/java/concurrent/images/interview-questions/synchronized-release-lock-block.png rename docs/java/concurrent/images/{ThreadLocal内部类.png => interview-questions/thread-local-inner-class.png} (100%) create mode 100644 docs/java/concurrent/images/interview-questions/threadlocal-data-structure.drawio create mode 100644 docs/java/concurrent/images/interview-questions/threadlocal-data-structure.jpg create mode 100644 docs/java/concurrent/images/interview-questions/threadlocal-data-structure.png create mode 100644 docs/java/concurrent/images/jmm/cpu-cache-protocol.drawio create mode 100644 docs/java/concurrent/images/jmm/cpu-cache-protocol.jpg rename docs/java/concurrent/images/{interview-questions => jmm}/cpu-cache.drawio (100%) rename docs/java/concurrent/images/{interview-questions => jmm}/cpu-cache.png (100%) rename docs/java/concurrent/images/{interview-questions => jmm}/jmm.drawio (100%) rename docs/java/concurrent/images/{interview-questions => jmm}/jmm.png (100%) rename docs/java/concurrent/images/{interview-questions => jmm}/jmm2.drawio (100%) rename docs/java/concurrent/images/{interview-questions => jmm}/jmm2.png (100%) delete mode 100644 docs/java/concurrent/images/threadlocal数据结构.png create mode 100644 docs/java/concurrent/jmm.md diff --git a/README.md b/README.md index c52ea550..9fc8b2e3 100755 --- a/README.md +++ b/README.md @@ -90,11 +90,12 @@ **重要知识点详解** : +- [JMM(Java 内存模型)详解](./docs/java/concurrent/jmm.md) - **线程池** :[Java 线程池详解](./docs/java/concurrent/java-thread-pool-summary.md)、[Java 线程池最佳实践](./docs/java/concurrent/java-thread-pool-best-practices.md) -- [ThreadLocal 关键字解析](docs/java/concurrent/threadlocal.md) +- [ThreadLocal 详解](docs/java/concurrent/threadlocal.md) - [Java 并发容器总结](docs/java/concurrent/java-concurrent-collections.md) - [Atomic 原子类总结](docs/java/concurrent/atomic-classes.md) -- [AQS 原理以及 AQS 同步组件总结](docs/java/concurrent/aqs.md) +- [AQS 详解](docs/java/concurrent/aqs.md) - [CompletableFuture入门](docs/java/concurrent/completablefuture-intro.md) ### JVM (必看 :+1:) diff --git a/docs/.vuepress/sidebar.ts b/docs/.vuepress/sidebar.ts index da281011..6aa16c3b 100644 --- a/docs/.vuepress/sidebar.ts +++ b/docs/.vuepress/sidebar.ts @@ -104,11 +104,11 @@ export const sidebarConfig = defineSidebarConfig({ icon: "star", collapsable: true, children: [ + "jmm", "java-thread-pool-summary", "java-thread-pool-best-practices", "java-concurrent-collections", "aqs", - "reentrantlock", "atomic-classes", "threadlocal", "completablefuture-intro", diff --git a/docs/cs-basics/operating-system/operating-system-basic-questions-01.md b/docs/cs-basics/operating-system/operating-system-basic-questions-01.md index 2838fb20..12716a44 100644 --- a/docs/cs-basics/operating-system/operating-system-basic-questions-01.md +++ b/docs/cs-basics/operating-system/operating-system-basic-questions-01.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: 操作系统,进程,进程通信方式,死锁,操作系统内存管理,块表,多级页表,虚拟内存,页面置换算法 + - - meta - name: description content: 很多读者抱怨计算操作系统的知识点比较繁杂,自己也没有多少耐心去看,但是面试的时候又经常会遇到。所以,我带着我整理好的操作系统的常见问题来啦!这篇文章总结了一些我觉得比较重要的操作系统相关的问题比如进程管理、内存管理、虚拟内存等等。 --- diff --git a/docs/database/mysql/mysql-questions-01.md b/docs/database/mysql/mysql-questions-01.md index cd6d6e0b..2a83f3e1 100644 --- a/docs/database/mysql/mysql-questions-01.md +++ b/docs/database/mysql/mysql-questions-01.md @@ -8,6 +8,7 @@ head: - - meta - name: keywords content: MySQL基础,MySQL基础架构,MySQL存储引擎,MySQL查询缓存,MySQL事务,MySQL锁等内容。 + - - meta - name: description content: 一篇文章总结MySQL常见的知识点和面试题,涵盖MySQL基础、MySQL基础架构、MySQL存储引擎、MySQL查询缓存、MySQL事务、MySQL锁等内容。 --- diff --git a/docs/database/redis/redis-data-structures-01.md b/docs/database/redis/redis-data-structures-01.md index b45b887e..c98754f5 100644 --- a/docs/database/redis/redis-data-structures-01.md +++ b/docs/database/redis/redis-data-structures-01.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: Redis常见数据结构 + - - meta - name: description content: Redis基础数据结构总结:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合) --- diff --git a/docs/database/redis/redis-data-structures-02.md b/docs/database/redis/redis-data-structures-02.md index 27bfaadc..158ddf62 100644 --- a/docs/database/redis/redis-data-structures-02.md +++ b/docs/database/redis/redis-data-structures-02.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: Redis常见数据结构 + - - meta - name: description content: Redis特殊数据结构总结:HyperLogLogs(基数统计)、Bitmap (位存储)、Geospatial (地理位置)。 --- diff --git a/docs/database/redis/redis-questions-01.md b/docs/database/redis/redis-questions-01.md index 75e2d754..dc312379 100644 --- a/docs/database/redis/redis-questions-01.md +++ b/docs/database/redis/redis-questions-01.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: Redis基础,Redis常见数据结构,Redis线程模型,Redis内存管理,Redis事务,Redis性能优化 + - - meta - name: description content: 一篇文章总结Redis常见的知识点和面试题,涵盖Redis基础、Redis常见数据结构、Redis线程模型、Redis内存管理、Redis事务、Redis性能优化等内容。 --- diff --git a/docs/database/redis/redis-questions-02.md b/docs/database/redis/redis-questions-02.md index 3c493449..7d85611a 100644 --- a/docs/database/redis/redis-questions-02.md +++ b/docs/database/redis/redis-questions-02.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: Redis基础,Redis常见数据结构,Redis线程模型,Redis内存管理,Redis事务,Redis性能优化 + - - meta - name: description content: 一篇文章总结Redis常见的知识点和面试题,涵盖Redis基础、Redis常见数据结构、Redis线程模型、Redis内存管理、Redis事务、Redis性能优化等内容。 --- diff --git a/docs/high-performance/load-balancing.md b/docs/high-performance/load-balancing.md index 324aaab6..a215b3ff 100644 --- a/docs/high-performance/load-balancing.md +++ b/docs/high-performance/load-balancing.md @@ -5,6 +5,7 @@ head: - - meta - name: keywords content: 客户端负载均衡,服务负载均衡,Nginx,负载均衡算法,七层负载均衡,DNS解析 + - - meta - name: description content: 负载均衡指的是将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力。负载均衡可以简单分为服务端负载均衡和客户端负载均衡 这两种。服务端负载均衡涉及到的知识点更多,工作中遇到的也比较多,因为,我会花更多时间来介绍。 --- diff --git a/docs/high-performance/message-queue/rabbitmq-questions.md b/docs/high-performance/message-queue/rabbitmq-questions.md index e4e4282c..2fb782e4 100644 --- a/docs/high-performance/message-queue/rabbitmq-questions.md +++ b/docs/high-performance/message-queue/rabbitmq-questions.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: RabbitMQ,AMQP,Broker,Exchange,优先级队列,延迟队列 + - - meta - name: description content: RabbitMQ 是一个在 AMQP(Advanced Message Queuing Protocol )基础上实现的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。它支持多种客户端如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 --- diff --git a/docs/java/basis/java-basic-questions-01.md b/docs/java/basis/java-basic-questions-01.md index 4e5b329e..f0892774 100644 --- a/docs/java/basis/java-basic-questions-01.md +++ b/docs/java/basis/java-basic-questions-01.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: JVM,JDK,JRE,字节码详解,Java 基本数据类型,装箱和拆箱 + - - meta - name: description content: 全网质量最高的Java基础常见知识点和面试题总结,希望对你有帮助! --- diff --git a/docs/java/basis/java-basic-questions-02.md b/docs/java/basis/java-basic-questions-02.md index 7f75cc23..97e2e7b1 100644 --- a/docs/java/basis/java-basic-questions-02.md +++ b/docs/java/basis/java-basic-questions-02.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: 面向对象,构造方法,接口,抽象类,String,Object + - - meta - name: description content: 全网质量最高的Java基础常见知识点和面试题总结,希望对你有帮助! --- diff --git a/docs/java/basis/java-basic-questions-03.md b/docs/java/basis/java-basic-questions-03.md index 7a5ef53a..746a9a4a 100644 --- a/docs/java/basis/java-basic-questions-03.md +++ b/docs/java/basis/java-basic-questions-03.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: Java异常,泛型,反射,IO,注解 + - - meta - name: description content: 全网质量最高的Java基础常见知识点和面试题总结,希望对你有帮助! --- diff --git a/docs/java/basis/spi.md b/docs/java/basis/spi.md index cbda0865..34ef77c0 100644 --- a/docs/java/basis/spi.md +++ b/docs/java/basis/spi.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: Java SPI机制 + - - meta - name: description content: SPI 即 Service Provider Interface ,字面意思就是:“服务提供者的接口”,我的理解是:专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口。SPI 将服务接口和具体的服务实现分离开来,将服务调用方和服务实现者解耦,能够提升程序的扩展性、可维护性。修改或者替换服务实现并不需要修改调用方。 --- diff --git a/docs/java/collection/java-collection-questions-01.md b/docs/java/collection/java-collection-questions-01.md index a8c241a1..c86712bc 100644 --- a/docs/java/collection/java-collection-questions-01.md +++ b/docs/java/collection/java-collection-questions-01.md @@ -6,7 +6,8 @@ tag: head: - - meta - name: keywords - content: Collection,List,Set,Queue,Deque,PriorityQueue, + content: Collection,List,Set,Queue,Deque,PriorityQueue + - - meta - name: description content: Java集合常见知识点和面试题总结,希望对你有帮助! --- diff --git a/docs/java/collection/java-collection-questions-02.md b/docs/java/collection/java-collection-questions-02.md index 51b5b509..e9c30f67 100644 --- a/docs/java/collection/java-collection-questions-02.md +++ b/docs/java/collection/java-collection-questions-02.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: HashMap,ConcurrentHashMap,Hashtable,List,Set + - - meta - name: description content: Java集合常见知识点和面试题总结,希望对你有帮助! --- diff --git a/docs/java/concurrent/aqs.md b/docs/java/concurrent/aqs.md index 4b278354..be4c5279 100644 --- a/docs/java/concurrent/aqs.md +++ b/docs/java/concurrent/aqs.md @@ -1,5 +1,5 @@ --- -title: AQS 原理&AQS 同步组件总结 +title: AQS 详解 category: Java tag: - Java并发 @@ -13,6 +13,8 @@ tag: - 用过 `Semaphore` 吗?应用场景了解吗? - ...... +相关阅读:[从 ReentrantLock 的实现看AQS的原理及应用](./reentrantlock.md) + ## AQS 简单介绍 AQS 的全称为 `AbstractQueuedSynchronizer` ,翻译过来的意思就是抽象队列同步器。这个类在 `java.util.concurrent.locks` 包下面。 diff --git a/docs/java/concurrent/images/interview-questions/synchronized-get-lock-code-block.drawio b/docs/java/concurrent/images/interview-questions/synchronized-get-lock-code-block.drawio index 6c8c150c..fac9c143 100644 --- a/docs/java/concurrent/images/interview-questions/synchronized-get-lock-code-block.drawio +++ b/docs/java/concurrent/images/interview-questions/synchronized-get-lock-code-block.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/docs/java/concurrent/images/interview-questions/synchronized-get-lock-code-block.jpg b/docs/java/concurrent/images/interview-questions/synchronized-get-lock-code-block.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3975d9affe8d236fd94327957bd7803953511ebc GIT binary patch literal 22290 zcmb@tWmH^Ew=LYbYk)v-3+}D~g1b8ecXziS!7aE3cXzkYxVyX4I0Vf{@+8muo}a+Wu%CSZyw?VTLxBBi>)!$f1r7-f0R#JU2>|;K|H$~Nqh@R1 z-T%P*^h|VpbscAC`Dx&<1G2|F-kQ5U*VZuH5VT}eu)tr1qRq~Cv_qZB=HsX-udC4h z%5O1$RTyd0p>L9KcWX6_7kIA%H&rJ84F}JI2WcA3bDYH2zF_!X*PFvUk${L6zCD+SvnQqC{(IeY;^pO*RkRRG@MZv0yZ z0L;$*3xMUe{TG6cI{z>9j;HIt(EqPnuacav)gK2W{0#sAnn3s6GVb5@f%V_wylVSv zX&b92m;SJfvp`DJ=*(v%V#bA=7;rY{C)&%oail+5nnn^-V|2;)r0=_Tmy62K^8|~h?t2ng9i>`xOaVC%60hTxb2^Qg8vDSM2P0o;`9G1Brc`qAy~SZ zYg-*$F8h7qAAjiJLbz#jYbWf3$4C9G^r|ddzSS(GW&&N0G+dnHSsUBEf9wF0SKre3 zEKjMuGrm|_tDWwbXN(tgoU83tMeIv<{jpIy%@L15qfE^B;`ZbI_+H24508XYG>ikJ z6c^4>C^mriMOr-*_@m)aHyuxAYQQ<;YBhjBz@_@u030FLdbe^k7sd@hDm{p$NsJ}PMq zQ~(&hi9d0{-nHO%#L}`Dt8w4}0I!+)<3as&x5aF6xcoQ(fJi(1Ljq8^$91x}M;~7w zExd8*zwA3@b`JCy0NCjDUvI#+ClLTFD%f-7KUT^DsaDben5kS?kCgG15~G>@69xbtbuoPY zNvs1Vq`)J#xi~+vvUu2;=&v@r(`;7LHo~j8yuF>Z-q6#GOZK%X{}c?4E}_n0Uli@9 zHdivdPWiw5>llI1(pu*&;wWbU>^}JYAfz{K4C;Q$u*dMRV*ldIps<*ZWx7)g46 zc);F+!0TM0mi-t1PSNj9|A*Q2cva#31PJ^!K(@?(?K(l9f3a5aD;~c2ivfErugU+f zr~3Cy2sUuj_17Z1^VI?9Li88k@2)p;F4FA*1~Fq6iTP`Zvg{ z^L8uh-w>~obFE+CKM?Fb?ONo^zZi@F<0Vt*^;sm7#^v~zCCPFi=Pbl?Ojk<80cPb} zU;F)0fnhAyh8gJN=yS>9w0Ro}T?+j538R4nPLER#MGN)EF3Q^P9^yT=1CT zquPI&z@)h{FEHr6*1-18(hq5y=H-9aCyM?d#{`s*1zwr|SrD-PC;p2#l7H72#Q%}4 zB1yj&5a^q@o{?V~geh{c-xUr$wg|sp%xXB}F9Fc0{w@ADUjpEMuVyf*8q~SoUB7Bs zDy-5OziVld#rC#(uN>Iku;AOmU$^qVFJR07t6$dQv~X3g0xTx)eb=jm98jbXc$I*w ztJydmjs*bV!)tzU{>jgOZGnI12kLi%AW(nVgB^qgQV{*BEUAj9{i47Yf}J!5UMm3C zDQYQq$6vMob9p!6_q)Gv!@@)bUQMAdte}j3x!BNRzOGdO0Hy%*FY!N1BK-fvf6-|6 zuNnjweb+DfUT8S`mo$(^`qfe31~K1$-8Y~MuKbq(bg};y()9wr<^TH2NfP3B)^Yuy ze|bVrApCAAZV|@VFZ{nR&@B^~zxR*$)Y;|kU9XNXGKj-@>%SKm+Y;DXAH83}9y&U> z=B3h2$FI5o5U;7xK?Q(=L4bopLBb)!!NNhkzE6Qe03gwz(21F#-;f9@U@+@fV+twi z**o}u>qaGIWD$^8GH{NKi?5x;A|hjD R@7gaWN3iz5kP0sdFSjDk!a~nq0$hhb8 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 \ No newline at end of file +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 \ No newline at end of file diff --git a/docs/java/concurrent/images/interview-questions/synchronized-release-lock-block.jpg b/docs/java/concurrent/images/interview-questions/synchronized-release-lock-block.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c046b8ebf28dd5ed5914aabd0386b727718b1aa GIT binary patch literal 21285 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%0DDO@f? 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 \ No newline at end of file diff --git a/docs/java/concurrent/images/interview-questions/threadlocal-data-structure.jpg b/docs/java/concurrent/images/interview-questions/threadlocal-data-structure.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9ef3a8677e223b584236e0b89fd16cd79d0ffc1 GIT binary patch literal 23319 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 literal 0 HcmV?d00001 diff --git a/docs/java/concurrent/images/interview-questions/threadlocal-data-structure.png b/docs/java/concurrent/images/interview-questions/threadlocal-data-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f08c54ebc742832d26b768b54be3107a61e163 GIT binary patch literal 80830 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̢Wokp-y9p1^Fx~J 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 ZGys*eAdUV%{IUQ5002ovPDHLkV1gGth)Mte literal 0 HcmV?d00001 diff --git a/docs/java/concurrent/images/jmm/cpu-cache-protocol.drawio b/docs/java/concurrent/images/jmm/cpu-cache-protocol.drawio new file mode 100644 index 00000000..4535a6e6 --- /dev/null +++ b/docs/java/concurrent/images/jmm/cpu-cache-protocol.drawio @@ -0,0 +1 @@ +7VnbcqM4EP0aPcYFCGF4xLekpia12fVMzeVlSgHFaIORB+TbfP1IIK4iGWcTNq5K7FSMjoSE+pzuhgbA6fpwmeJNdM1CEgPLCA8AzoBlmabhiB+JHAvE88YFsEppqAbVwJL+Igo0FLqlIclaAzljMaebNhiwJCEBb2E4Tdm+PeyOxe1VN3hFNGAZ4FhHv9CQRwXqWuMavyJ0FZUrm45X9KxxOVjtJItwyPYNCM4BnKaM8eJofZiSWBqvtEtx3uKB3urCUpLwU0749Gt5HV6x/VXwc/lX+DH7gj64F1Yxyw7HW7VhdbH8WFogZdskJHISE8DJPqKcLDc4kL17wbnAIr6OVfcdS7giUVyOaNM4nrKYpflc8M4NSBAIPOMpuyeNnlsX2Uiekd0THkRquspmskffsLLBjqScHBqQMsAlYWvC06MYUuuxOEWpsZLZvubWshUWNXn1FIiVnlbV3LXJxYGy+hMYgBoD05vPAviHrGjGSZo9k5A2AcQMERn3EeA5Y4idLgENPk13CEJQmxDYQ4jp9BAyHooPc6y7xBwBFwF/CuY2mEyBCGESWYCJOFjkiP8B7/CljFXAcmJxjZPbtMWa83MrHT036EWWW9QXA0xnc6g7xdEq/52PwWQGPFMe+BPgedU6/4p18pg4ChJNGcLovE1/m+aEJaSjCQXhmK4S0QwElUTgE0khFWHQVx1rGoZymV691YqUsojxLYknOLhf5Xh38YaiHNVuyHCSf/M5OeaUybUv4OCBodKT0qEDe3To9gWGwXTo9QeGs6S8G/aHDeJuJ4j3cWX0cAWH4qpM8W8ljdoQnVsarTbxNvOoPW4z8vp5tHSB9/jV5QoZHe95/fj10E3oFAcReZ7jaA4CHejBUHepxcKf2YtHHKdgZuAnAts7NZQNlvkt+82y0U0s58AG+nNuJ0noy1qDjEYxzjJa5Gacch1+JMuTA+VfpTFHyPJU+1veNoyyPTsoa+eNY6NxQ1IqtixD4ex0bjK2TQNyQmwgYatQolPYoAj1MFRiKYnFff2uXV7pY02tcMOouOT6Rr3jr8joEF9sSJ3VLId0J4LjttTKqFxOJOhbEa5NlIuo2vYzdOW8hq6aqnpUUS+lHvus1IOQPXogwjxVP/lUdkdC9sgw/18V6dWKa0wTgVyTNVPhb4BscXpW0PLK3HLRMLnbdfRsgfpuegfMFvpT+1BefZqHnonjVfeuZX3lv7qdZXldt3O6KWBgnyu38s6xFhFfhmOE4KjzPOsY1qh8c/TyNGO4OWY/6EeDfvru/r1zv/Hvmwu9oJCXZafAg7L868+A5+YFYRe4BpiL/6LXBnNHNv2iRDyTVWLR5c/l3/Ni8ckRN8RZVM3arRwh+e0L7U7+0QuyxWeYgO303N4PF7B7WdarFO++LGDoPpBan+rL2kQvFqxFs355WgyvX0HD+W8= \ No newline at end of file diff --git a/docs/java/concurrent/images/jmm/cpu-cache-protocol.jpg b/docs/java/concurrent/images/jmm/cpu-cache-protocol.jpg new file mode 100644 index 0000000000000000000000000000000000000000..54ad141fc9606f518091a9f3ee291c3c54194243 GIT binary patch literal 31337 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 nG2K2$&5LLteZr^E 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 Vcq`@Ou4k=89{BUa%2fX?{tuw15b^*3 literal 0 HcmV?d00001 diff --git a/docs/java/concurrent/images/interview-questions/cpu-cache.drawio b/docs/java/concurrent/images/jmm/cpu-cache.drawio similarity index 100% rename from docs/java/concurrent/images/interview-questions/cpu-cache.drawio rename to docs/java/concurrent/images/jmm/cpu-cache.drawio diff --git a/docs/java/concurrent/images/interview-questions/cpu-cache.png b/docs/java/concurrent/images/jmm/cpu-cache.png similarity index 100% rename from docs/java/concurrent/images/interview-questions/cpu-cache.png rename to docs/java/concurrent/images/jmm/cpu-cache.png diff --git a/docs/java/concurrent/images/interview-questions/jmm.drawio b/docs/java/concurrent/images/jmm/jmm.drawio similarity index 100% rename from docs/java/concurrent/images/interview-questions/jmm.drawio rename to docs/java/concurrent/images/jmm/jmm.drawio diff --git a/docs/java/concurrent/images/interview-questions/jmm.png b/docs/java/concurrent/images/jmm/jmm.png similarity index 100% rename from docs/java/concurrent/images/interview-questions/jmm.png rename to docs/java/concurrent/images/jmm/jmm.png diff --git a/docs/java/concurrent/images/interview-questions/jmm2.drawio b/docs/java/concurrent/images/jmm/jmm2.drawio similarity index 100% rename from docs/java/concurrent/images/interview-questions/jmm2.drawio rename to docs/java/concurrent/images/jmm/jmm2.drawio diff --git a/docs/java/concurrent/images/interview-questions/jmm2.png b/docs/java/concurrent/images/jmm/jmm2.png similarity index 100% rename from docs/java/concurrent/images/interview-questions/jmm2.png rename to docs/java/concurrent/images/jmm/jmm2.png diff --git a/docs/java/concurrent/images/threadlocal数据结构.png b/docs/java/concurrent/images/threadlocal数据结构.png deleted file mode 100644 index a7470446844dfb798ec1c9aee92a0493b523bf56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41231 zcmcG#1zc6#wl};8L68QKliUNcAi$5?BPxw)Ob{R*JTO3FwAP*4B>1^xlIbHED#@$T~g3F!eU8VVXJ zHWnr(7B(pk9{5MfMod8r7B&VhdK!8z1{Gm$ZebNeC0QjyCv$VB=#c2f#%rkm?FP5) z0Q!9x2^dNkC{h3#9SQ~=>b3(QfUpSz1%80vA2=x3doa-O_itx``#-yHl75c?riqP} zp1vDKkPaAG)12DF^P$=O03d93^X(G@zpnrcI{!i!k!?!tbj95w`Qzh(lTC|m0QRh< zfX;m1xEcW1n|{2jii++MzMJuv>b_tb0E|~ab9utNb_Jj?M}fn$TyPwUMG*j~3Wd|N zfaH7tNX-G{#~{m+3IG6eoLEUY0Mb@e381tN0K4VY0sw??$=(KbLmIHB z_rV2_Hs%{6gttauHzw9s0NVQnxB${d=w*f-U(N98ISpAoUprFGJp%6(`PoWL7!Tq3}Be@Q^ zTQl>2DdI&ZH!|EsdKR?zOD1KC?VtJ>1t({L(f|OoNh-Ntn@h1r2ZVVV@8?V^Kc!48 z#5nz}o+TDV7?GAc^~;STc!%C;iM?4kvGBJQ5W*bskPjiUAsS}NjsG-8-ZpHr=x-7K zjZ=bKAi6aw3Gx0UlK>K{U?#d=6>2evEX>>OVXdb*u444%Uh$EIjDhx-@FK# zpPkY|)J{b`dWy5^Mrrf+u2Um?DmiE;A%u|a|`xMfnoltuegwL2Jul5RAsyBL z6Y5kY2!}}Py;t$VGFJzDUpLfTUqBE_ma#NNY5k%?uMnL6VuCt3Ps!oLKLCJ=LaBXJ z+9?b=^_?rDm-X$vX8(jfp$Bp3#6nE=+%6A00QjWqQ8m_Ul8VqE40Y#>n$b z3{F6vIXq85z+NU6`T>Axc%IZ|uX6-Ku`)OUJ5StEtHPp)!WHccZSzLaL!hIRC-Uh- zPGO+k(x)1s^f{L_AaI@O*aYnyaa;&TzSZm>klL1-LnI)Ws)}M8fUS6D2gs=hpyJN@1`rG?h!I120RZC^ zfN3}R02zYETr7k-9$Hf~1E3gG!7(rr;>46)b;DKQMF1>J%H4Rrw6BB#((G0naCFrl z{e}QA9$Hsfg*h@T*ldG}deZfT-Upy)G=b34S%B5VB!eV0{k(M; z!}kCH@NR*uO|d=DB7-+5@LHuH2Hc7UDW}AFhy-GAVs`@oAftA8#kCDI0|R}+El?l~ z00d!UnChP}u`Z!Pnfw(uVfeR;><=sx8*Q^bubwaiW7|g_0VBt?ahJp20KrL$0 z&7`+^eFO$k3Bo2)b5+9tnNO1*K+ezL$~{|W1kV>;V1?_l!mye$Aq*?Xm;@`hW*wzh zl&Ubw3WFgyADK=ia$fM^dVJ^exo6#Dyq0~!OQHt`D4b;(n1Yu!4!)NAE71kk1sf5~ zf@I((^Fj>!5ms*BolaX(!^;fpZjQMc9IxZ^G2iK2rsn_<4qAJxZf<;hIkrqeMi9Oc zMn6upk!qh3i!8A$$Xi;yo;jM@{qFSc8~3dLRr<|2=950Y~_QRi^}MZro4qfr4+`18xtP$WyBDkf?Go-clU@#{^-}MeSzL=Q3oN=NtE4(1Q3?o8qEek+J zc5v_ME<^aSQGoB@2^IRd+vS7T{$4P`{Hn76{(Q$xc`$xHg`e*gVGQ1PrBsu&j=Z>> zuikd98%^#$Z3K^>Zp2IKhYf?S&*6nd3>$2Qtk7h}!>ewjG`s24U>dp8e0~PNVdwH^c>S6|U+Jw+c z-^7ho4?bdW-zZw7J)2ph(Afnr+(N(Qm)`=?K^V*@yaHed_L!bIffJxEGq~zU z0SxEGVIloUS$=T2pm|{(D*%U+Hh?V*;lq-v?9-Q{lZ)A-)8Q{$^8ShMOIVCk!HFiS z!PYSVj9BpGHZHiazt8Bn@8!za2F}UCc>Qr)`6;-4@QaDZgTep|&hnPWnKL-+`*|+F z!AMqI2R2{`1|^6Zi2;Cr<8bi=R5#Rv1Aw!|rmhW)&zLRqUjjglrg`0z{}2WMW?*A* zd>2#`l9Q{?oDKjk$0M*`Xw3)5;Bb;Jib30aJZ?YOIynNzpn{U|Ydt^#VWJ<+?VZek zT4C{fZ|Mp#pdp(Pj9C2qIl#~0N75_|k2?cgemmw5fJ+RPhpN?x0id!vw*mmDj=Z_x z9B`}d!@U3`R$y7%42-2tu5GAgPZ#;V66y9KfAAYZ0@(J?%Z`w)n;Q6)9N{PVMjMT; zy7K&m0l45tn%%(qk?S{Ly=(5;Ux=6}r_N^ab>u}{bQ zZlK5ZX;IEYlyQH7&?)P@!N$(7Ng(Uc)zjzF%kC4n)?J{5D;mj;Um(Y)si7da^;O;X zKX*y_eAqQKB-UjZJQiMJDbPPRGFvbi-gq9Y@8arv!r#(h$bFt0+&RS*SyCGn>`vs; zWn1;W{dnZ$V*c1x=kqyFTKc1*$>7>|e{9(g3@>lbJkNUMv5)eh8wTy70S4_lozEaD z1O~l%!9bY>|NP0F!oWz!&fQRFWF;|w{iz%m0K;QIhu}uklxbEBtffbyI;`a{VTXi$ zZ(w5OcKTUjcl2sd$5%Prc%K-#-Ear+Ui}d8I`3jCi{ZLD)@FJAY`K*f#8>zj!n3FX zeX8bb-KJ;A8F-c$DK?}bvUXliJpgVzA8*$m8t?Zv2oa7#1iA; zrT%qU_1h;^*fM1Rr!RVCVZ-`d7=U?c4obU5vJFLbn$hxJq@*LK`?%`*?F1@{gFWu> zhO2uc5|BH(d_ev2l&fOxTm9@cuyfi5Kn1}1SSl3=d&+2DztZlO)}j=+^fROwi7};~ z-EWHE#(VbEd_g3L7=mgoEB@6YE@8M}-T*J(>i|px!vJ6s1Tf?S``$7WAh!(woZYN` z_JGg$F1FQx)lp#^)C!C4?@oC5#GN z^Yq2R`NGI z{{N@f66^pP7<7u;fWad`!w9%%>jgl`NkgF<0i+3)cb5-804kuopdCXhp=rFp_>vv~ zT>_NqgI5{>_ZaU{wt+TH1Q7LUI6>YJ6$0*A$d*ds0NWMZQ1+MfKze;%ufAH(G)=Gw z;fE#1&$C!N%j2vzmfLdz50kN0_K~>#RFhUlJ~-NsIt}mz#WfdDDP%Lqz2v_BghHgA z&wcWg0N*v$Me*xug>}!EIg{K={ znj?u-iOGCpBtDvcLR7kXB({?+H*cEl&^w?{cuNLrg_V@Z0|=|j-h2QVMmhoRF@g$! zXaPzitQ5S!`T)>4=1zlGVP62!_xDV`0)&r{4nP&qI3nr_11BexEXPHhkfqcg0099p zR7N`hcN0Kl1ei>4C)=RI0|3<&0EVL!7&JKoP${$P;C(OKx{L)AlaOjrwS-~1_uw-& z5f$}bJ=|j6T-`>h+-2Pw2acMRy&iv9Nz``Mdbip_xD?EkZEP=$N;d%?yA#FZ7EIxz zD7UnL<9tPlJq{dLI7lal7cDw4&Phs#FVJjz@yd^qGPxTLX2L&L|H!LKHvT?tGX8 zLU{)OfNeKG#Vd?4l1>Z&9OeM_Q6+XS*nO`!050OI0pt>{G!rU^`w3zjh~o=QfU%q+ ztx%HydQceHJu!vJ{v5F$v67ri@S<}#SX5xE&!HP#Ix0V6XY1>l7Od5%Gjp|wd@1c- zv1p5~mWf*N6->N7dX7wYd(S=A%94gn#7k>~mnT+(1Oto*qMs7lG4{Em%@-u+aZyM! zypSa$&W8y)6k#u<^w~;RVNj)BR_PD0A2%tB5H@%MN6s}YwT4hFz^=N!l{|u4i zl)X)c-%~4|QbaniYU-QZ@U%@kPPQF39 zy<*ydLI<{AE`?JE=&wz-HdV7{F_VaUf5x_Cb1cHE@jdev&`{FjWN;gPfRS#Ly|v*2&RiaKxLRWcTB*Ps}4YWCsp19KsviSJB_-h&~k{Z4ax#<-;zn{Z=W3*g{NB zA9L`H%#zi!t3vgaXxghO>L{1goR>Hla?~oenNy{~;hYiY-(NBZ`1kY#}8*M3Zlk1`2Poky&sAcs?w{4{6}f^?TAZa{;SP;I9NEgPDbhc z5R4>RrtLp+{8uDXam(m5@QdH%mT*Vjz}4&#$?Y#lwR-6h9qqJ)m7Li%nmC_6`B?oU zSmzuy?|h$Zv8gQj(rr;f&!E;((B;S>+{(C1P^wEjOz^=kZmy0Au53ajQjN9Tk(tcYLNzw+zRtC;mqQ*S*uXK%&8k#*-TJ zIn2c3AIOO(yh9(nHT;Q+^Cn2MizDvPDhoktl2J?rrndntoqG3DcZAiZ6P&!Y@m1Az z`hTWzQtazEp^>VOwxnQ*bS?k(P_8c7HTLC`$_3eKgrr1HyK1OpTh`If`LiZtUge7v ziXY+`*Nmek7uMx*su=CU)Yc|iJuP~<3@lRiU_B93q`Ui;rSKI&hCEZKcuHJ)GTmP>_`>$y? z9|xL7jlu#|4_0VU5Tf{`(V#n+B69a9{09>46w}7~unp!R74L7yZm#k1dF}kU?A~WJ zff5m=c}NIo=6#Yt=hFaI-kg8pWow?l%6uMDjs5mupE)}xxoByO#{X07)3f0{prc1Y zw5+wFxxNb(1#(B74jzz7@=q|O@f9S{H#UM*gWK8;^5#kHp zuC4T%=aA~e?pa^?6>Y^#^|#Qm1}~GoMo3lgJM^5_IXE~!)t<=w(EGn4J>?6X^C#sK z+8h-P(;nC?5|Ow6m4c==6X(CZGbg5bi!w0lQsbVwJ72)ZWj*-UMxXb5fQGxQ?7y%m z|Ms;c+uDTI7eu`;&|Chx<(q#Ep#`o-or&^|=%UQJX3l(EO7znw|KQB!7x$!o`tp{) zcG;e`hD4PK2}g>Sa8Y27g0ld+n%RY)fyao(pU|MVKgfmDx@|R|V%Pgq7-J9tuYc!r|EZo{|6qB$OLDmKk1Hg^vLcR@NW677iNA`Snie|J{*9AK-y`&wSPV|9=? zIanJCg-#@gbS7s}k4@ldA`(;&hNW!L?;bb^aYp1pVPY6$cqXqgn(SRIIep>jsViY8 zb5!uY{3`_G^YfpC6_2Z~eUlKgwtvjq5N4_|)vTGF2us|BDNbx{c(O zFfC8bf10koOfGB&?U##^PZjE!5B zf$B^KFX5~To+AyZa85h*OtjIy?j=*Qn#>$QXVX51Cl;!4O=?<%JbTTjj=TBpPChx_ znGhI&Sm5jfm=q~Olr8@5F^_MyI_sqaUn3-}J3Go4kl2w1e2SyQGJLav<@6z6 z2m29XStw!yJJk2*Ta$jDx?djUuRQ&=JE`wSHWw9VKAqB^yr*+Mj57Tidy45p-&B0( zmGf`SB2iS1wGg|eO5o=qx55vFVaZn`JslUc-ZE#|K?f#qmB;sIup`B7d@<|G{6qb^ z%P%OWs*j&ZI`~G{c2rCKZu}0}qZX{F{@0uSJfz)6{Z(|t8gP#~Z;nU$%w|}3eEua6 z|BA{b6-{mf+YkOZSpO|@gAM2MtkY3cRxSU@c#8z~X%I0R7TP=)`s+dNZJ63d>9r#deXP2V((Jv=dMy(;8$ zj@~9mt$1R!fS+b{$RIHh=XWI-(;0vgx1&8e8S|@s-D*+4kM4kqrSI*RI#Vs`Bj5b5M$l*;|jH+-sd(QPr{rB-C?EtZH$z6CT@Yp z9xvydbGwn0n?46&onc_KKgn4L(8#sRv}#XgoSQHZ`9_;ur5cA{x@Ro;jBVxhaW*xacNeaD{BxfC4IM@&-M1I4Q=6A-5N>asJ4X6 zuz808UhS}rp{RGUw?@!=ojyg^XD=9{th{{ERLaD(i8~{3oJ4T=Zvo``RV5m#p50+s zGGLnIh_gDGR1A2nnl*@#`M)opMeY%H%C_~92{PDiA(c2$s%Ih6~LRs^3bBaA_`*WcA*a*sarS}TO#KFQ>A0utO&bBR_xQGV<`27dDOm$xaK8(Ds6Im(a(xH zxji(2_vq7ePU#JSwQ;QIpbHh}p#7$SP}%GD{d^eT4e@eZZk2z84pvJ@g*_c9kYFb~YLn!*9EUctR2pU&>?JW={Uw;tJ zpXcJ~pT-l%zcwPZPM8vV*I#$2;FJ9=a_RbIufzS)?jO$U231W$j`a#l50lyY8>UDh zPXRA=4CUp2aoxAy5>5L9rl}d86(Ym?zOhSoBENO(AJ|X7yQ3#(Qu=~qOUU%1A5 zuWd^8&)x!^l=>GE>8kZjLW)UdF4|qO?L#ubx1ZM8w&N{w5V;M}tjl*CYvO^ar z#iC(~<3aJY|DfaZ|Z%M)E!v zF^7{CfTQDfz+HS*e?wJ>O0JR=O*;MQ3YNE}m$_~1gX)jc_Xx=%=L;5dYg;!caj+zC z8#?VKK^sU*H){7+Gtd<1=FRPl!f-PYZKM<69ze*AeW#zF=+#hea21U2CBKSz&EnVthVoz9bto!16bqX~5N^cUC$udmu{w9>Y!!);_btyQkQiUX53e zflMd|;?T+V%iv?`9R8>C2X7Y8bz;A-4G%ZJ?shf9sOA@5Dwf@ZiHa&tXye-KD6gt8 z^9ZFY&50tL&8oJZr+FU42-AL1y8?kbVqW>~+t_sGPIs6G4*2+1dYCpt8O_#Dowg+px1 z0(l`)*gc!ms28%fA62ML7&#MsG<6&g=<``S*N96|HrF+ta}2sRC1VV#-cyBzX}`L! zpLxB{W`A_@BV3#5?NXs#@rE3YvNN&F)l23FYRvs!>4>BEjL=CZu#u})QGc6Y{TA4? zL*1(4(t1f`6DDtbfE{GOTY_K}jj{ow^l zh0TQ4)__Y)D@%JXN0ND>u`_dgf0@!w+Mz(#SiVI}Pa}=H=x%DhlbTCda;o|lP@rF8 zC{)##XSKv9ht>p)TCIl=Xnt9)+ISevU6$NwH%Rx`N&Aqq&Z6Pfm8JzHcthELQgCI} z(XlzhkEhACbX33wL2%j@yq#my(Ed;{cP>M`hIyggtNmc70^11X0_VR6mU=I!Gmye4YL z9Q`%l580m6ifKaa0}InllwwuIVUdR62_&@Z`J%LV1ggiJt%ouT?~D^Ugg5ro#v;j>QuL;#hbY9n6-~pHSEzoZMRp^BQ9HuNOveo_a z3agAh$i0P%c;vGOvdm&l5ppR_?ObAJ2_>Ld~fbu{r|N1Iq8vB%Ug|TXGcJlA{^3g7)Yedy_?bX z#IQ^^`|%eNe5cFNJjf@Vm@xTWEX^j?S{mW} zT%Swj+AEY<jRly)v83 zakFNTnfbW0o0>IA{5*tm@e@VUCK@_APDtpeO2i6rSZQ)mvozXc{>=M_^(6;6GcEoJ zw(KGaui@TI^x#%i);=7iD4m*-e2rH`tT7>CZs4nJx3-|2&I^Y{hj=Jb8l;E~dJ7LW z@5IBBt%Ctx19UUBqz!(p!1GJ zz?JCq5vSB%Ic*vHsmAHqLrhW`zgh;3cXGJ!u1Nl|b$`G^rgX!;KfruUOvMnc^;_!Lofi z34Ov{%G#E;^R4KURS+HRUc~X4#(PG~YwXVm)&ot|ywoLhJ9MVt8@ljUp)c;xDN~Xc zLm$|qRODeTG7L;;X9u$pQ&_?=7_heh!rSmlDx~K~A6Fepp2pt-_iurVZ7|Je zmDclCk*rGhpcaxUNW?~Xg0N=Jj*^8?3gJ&UGB!svgquYi&gDKQdRSKreS=34iC7w* zXUy}{LCN~!DLkxZyP*^ite9ZZNZ#2Pmn(lG$IDwHoiH-~(RNz=qO!`gXU5^G%Y4%EzbfW9Fhu4F zZGF=_!TL3%sv3f5iMWvsvP5oh}|3xzsbTNV2uE9i;$>z8`RYk46hrZk%A zO|eOr7|q80a<6&m9V3kKC55C&v)XBUD#D+JiAQn>Si`Zge4q?(u7IunDK8wQlDw$C~_z4Ol-Y9e{c@!2cmfT#3~kuY zm62q2WPDjC*^SfVl);Gf05f{ENGA?Ci>;`hj*Knc#P?_CY6R!7<3!ArXNV#hpZQRrGpAm}t;K zJn`vSf{WxxE#8oNVOUt0w;MXv>Bo9yfy^q~*sVi{q7((sgfmPdcZ<2SI^>ZSF&^_QY`UThh}a!w+rf z)1|bN@&V<3W_p=#GDMXMFI*@FB4JV3qqA6Vx-X&ep*bu4^9`D$qpql9b{T|p+M;k) zMBuM*nRDcc#)Q;sN^VTVK7=#$(rbuIX#5CtTM>U+1V_js?LJU*`rtrbU{$4YGpP8B z()XnJLt+kX)GZ4wvA5%5^VsG_4e82HN?N4jZp>en@_zJ_L4OY;ow_<$vVnyt@9KrP;#nc%eBPT_P@Na4*NNK>;IEUK|opQ-sdpxwy2EIPw{m0BdB zMt~Q)ocszNGG_PBi>ge%A>ZgonCQuVB$&dqGq6CM{ZUe5squ3+cf0LIPB()T-tvJo zEsMe51JkjbcJX4yEd8$O4=LRUqi+GT(4QRq6BTpv9r*r~Cqkn?k7&U6*=N z9y2>=zxkB+*~=7iuTB94hqv@M9Cyd(kfaIcs8y-XlLzH?^;4YsJ1LBA1BtxreQ7S{ zgZ0%L`ZF%S2KWRY_ZdZC;#8r;Ela*ma91Uf4#H;obNr8mmX@Dp>_GRx{<6iS!~f>_ zg^D-iRkNA%>IN#MYyeA1I^%(qX@#)qzCsU9tfH~I-O|xe_t_-D2r2&reFsK`k zWaYv(BK$sLSxC__-W@A~*{&W#i^=OC>fQ=Tv#nvy~ZT<$6^daZ8>IY zxnd0EL|@{;C1wrupwk=Gar$_QR=DcSF|c`6dbKD8BH=CvcAcSZWrnzP|07EWxlWZ? zmS6%Thxu1-2bQi}doY5rtVFx2UbrGg=dIzihtp07qGDzcn-%KnI4NYxM8G6EQpC?QGcemq;gzDdSrbc2GPb2X=;~z(Bq*uJ zy`(9?T{2k>Rk-(H)GCZD@+I;eu<3e2V}%eONr3NiiHm-ZBnl3?da6=L2c4Fs!faYqve|O=1??{7sbNkG3Sg((+7T}xyyQj8N)03Hvv&I z^6b^*R{MP9^8DxzQLT=Pi1eU8#=c~fDMrGrcufOIc36NfU_FnW|4d<_euwLdM1Ejk z@*O48PM)WLB39%@l}}lFka3&VM<-&%s5Zq2oL7$~!YW||xrrZ(itxtkbI5}Umq?~Q zw;AKpII>=t0gbTgP~dY6x9ry$w-;r0B6u=JLmH`6lexxh2B}Db_ zj%Y#uk82tzJGw(p510=Py-;p|cw)=-X8k)5tM)C189k7U5txWIi{|-z!UsbCOXy?g z-XZpxE89DmK`<|rTAxS{CV1`uTft`Q8~#rSwEt_O2Tb$LfPipW!uFC~Ke*v_0eQ}m zJDTty1^uFCfYbl&&vV;@u>LeDEep*AO9b1?c6Hplf-|qB=k2T0uKU9=9`3J2*9L7i zA{IK^l_pkudTiVF8=5uSi^89UWwyMo)1m8k6YOL?5rb=H7kzp4F?a+tli4QPZs7C8 zpS#MB(-L8AVW)=$_5%G)bmhLi9ZR%G|5_NH5w`_vKSYvIf#T&`kzQhW#w{BJmPcw+ zx?#ohY6i}v?|%`j{T>8OXr#`<4yFM(rH>P^#JEF99TQqpDMVgOxQ(!M_-Wje2vVXL zoN%k7^XI1!0SEr2#8}hOAufOF9RDQ|+l$)oPfN=A)-OFls&Y@j)0%Gf`1qGj#*<$8 zLt}p!d?A>8QG2O7j)8(BN?NstJxuc4uK2MS`Sw+#rjja9PlHs|cY@Kmj;qLhgkpK` z6~PKMv4D|$6;FVcD|nV+9McL%B!RliR=l<$wUpA1VJS2Z&e@|YcDYbURR<}d4?n^EVDVkX#i+4=> z>wLh3q+_a5-kJw9?=5a>D6MNudxpM*)^ z_}8q6N5zT_H+>u;kd87W=5(m2w#E8 z$7U=czkT;v82Zd~)-hT0RHCFE45~ra!W^DBIr7wue0I`ActjkHUQ)4F8hG&s%a1lo zt{|Bk&}4}UO)Ir4(?iL|%FW$_Dg?Iq5SDgl_qHh1!aS<(}@{d<74xYEb z?s-sLdbpChZel(8cl;0Uvj^KWs`Nd^rV`j>XtnZ6Z`{M51m}5v*5o&PT*b;JC~aHu z#S-|42kW;FVQ=FU5SYXy0&nc`? zScFiqr>hc*L?6IksQxTnJFMnpIy~rjA)&9`iZA1y&~eLBI=+!#0uO{#*j_A~rSTF3 z@Ow$gKfrNNJ9tCCM6KfmJWOZ{TM;jMRSL5~ESY3E47LehG(B!gl#HEcJ5q<@Rc( zlZUl)5A|PXP8qy?lN<7~sM5UlMW#Xs;*AQ4(iCax!+!Sk*Dq8>h0`>j<`*5qX2(!s z@z2}>9E2x6k|)|z^X}btJ0f~Q@8a5Jcj~f=^Nonb-CV;%Ro$#2Tzihxl3Dtyw0S>R zb(pG@?e9Juv&;T$$12?Pw%e9h0b$h%(M&d6vcD*iSKV>iJ_M(A>M^_Z{SF~F-DsPf zNJNWwQhlYtoD46VWWxI^1MsC;vr-JI*x#Op(|tIM01qfh?!#CG^)*z*wu_CitrA|L}rT+G%*-pafpagZg5K%Au*`Z~18i|$9XgFN3ug2GcSI^w~y z>a~UMG~copP*2n^3OG$KqCOfS7e?A}w4Q|P7ET^cw@>NygwoV{=odMOG19CM=_Qy& zk``;Rp7n}#^M+k*qVJHrB6xPC@zPgMIvh`#o@$st<6J1app%EIX9k;jKVXV%Hp+o^ zVOWC&t4~H-nv6X8*~zCa*h&ok=n^J1b%dnDBs=0u>`~hlO*y}poJ-siC1noeM=)6A zEJYo1*3I=?KT^+FzPUWsuHo?DRmZ7bQH-KNZ(PM0j_WY`B zqo&;ScL#&@T|vCvFK4(h_RDbCvApbUgLJpRw#$yOuB5U&c%<1yVNyifLuU;yx+t^nA3=oln$Xqd#zEFv0ja;mXdg;mszP2*nY)_fWz z6;)O>b7E5?BWE`nz@U@+%uAm zV*}QjVo4*N2fhTrHPyaW>uRKhV+p=j&7Z4YIDmi84GBSQ*|_@|BD060sg%d)my6Sl z92Mj2h4BG`=df9Qom$G_m&+(4fX(59&r$nHv=2>rFyx@Lx)0|9&BxmcADcjtR-ms0 zSh5i3M>Co+KjdcS^0uMMT1J?03}a;Zn$aeOu<9z@11Zz`_%&W zHR8;>IE^Ff1i}dvi6BZNi~DdD*>Z`?1Oe&9N@$c7=uh7T!qT=`NE&JM8_W~j8>Iw) zzR2NOXceVouUb2B_A@erw~Zsh}VTNn@c7F zp{(tlKRKhw@Ec)X7ULJx+UDSk*Cls^UY_eVd6iPOa?Zltj}>t2Jl1V}Nk6&S#(;=) zBn1!(4M{{!yultNMHU$kB&5?FaE%a9YXACxqI00HtCZl=M4f^qT}ssXt}@yX{}Fe8 zAc{k;W>)j7^Lh{Nw?3O2V{0U`0h*b%rY^yx)IP7BUYA&#^-sL)vL}3pA?iw@Rf_2n z=qfGq=)NoLvuAB4d@s-kDeOLH+f1{oEwxi8#q%m?wlUNZ97@Zmy?HUtRikTQ5bCCDj`*08OG*VWfRfmJH zTI{2zri#pBRvBo-=^19TfkkPc0sI(B zUchJxEJpH+tRQBRkL2i@h@*XrX`BzSReM9?n5nd*RU>M;&6Pv?hYBdgW0Y4oVCf|hrg2huZAOYDd1Hp@0tw*llW6|r<(uG zO0@?_zhuad;NxX&eUAHh;WM8K7O%MoYmu{Jq;a!rtHyu3T0KH3y~1V4EG z;eWcoz=0+FA(^ILgL?Pw3pm8KcybG){APftHgnLpg>hl1P65m5){lEcEE?+N)K9 zIL|h!V|6Yin<+`oPLMR=!=;Ivyxc((o(qIp*dCUgpx)ItG3d)W`+$iLKa6(Oa^NM}LvcZF8UdwZd63A%Z*& zx;>?kG2g_bO*h4`AM>_0GHs;@O_D4Q8#Doi$U~zt`sT|qV@vZH z=K3e*bmseTrLpHEab~g)Pi;}fXhI|wxqLJ)lfP<{U(2&a!im_7BiOI7bj-wwnkQ(O z;4w_(!^oWSsiWo6`PU3!T8M?!p_QajcE`yaCs6$-uKld%nFPk&4?FY822wRUx)h`8 zD0yAos#wNy%0i>k2<_xuH+M`-3#9Zg33+*^leR`CJ5Mkum`L`f8^`l#sRDUK4`cJQ z-Zz1^Mlri=dL$t7^-1Q1J`vx%Kg`gS-kyK$SKn9uA1g?LD!G15YV@p7VK717HLQX= zW6}=tc~mOW96ml*%4(qzK*nF|9N=ERjS77O-~RP-Vdvnnf5W27X$8zG+ZnPK65;da zb)}Rx7pj4|lSQ!H|Eb63q28D05#0+O&t}Mp1nX&4N zLEejeQMovgF~`PV?&VN_HTC=m_ZqJ06-wK}FCYANe%>i(-dx zi@!u#*5s~Av2;HqeFforl6awW2hG9cG=!_ly90l^`LBYN-0)Dmi${B^8u^s2+h`Yg z|ED`YUCh4-_StG7nf-+!hvDxc%_l-=_Q%arU-@s`S~hkJ;kzw&@s4o#V0=KZ1%N`o z2Nx`W%>CBR9Js*24`l9tCCxt?$R8AcALP+CJ#%qkQ=G(&<*CTA%R-AqmBIv>Bu4qy z(1t4B43(1k`!5*t8M+0Z`b_mt(lq2+wQGDq=hCE7+vbPg6vST4x(M>w^e3MCEy%vY=#wBe2hJ~H>(=dv8P!;=4Q z$kuoj)M-tZHE(tu_&+l2f2E28reR-(RuBp2pt;`vjKq`I8D*YCBpH>q|9AGK_Q78O z-3Ff3cfM8O5PX1wQl-mUHs^_~09#W(ok`C>co}&g)TKk(UMtkb^}tEvn*zM|2$Z_s z^b&TJt~fj9L7828^n`G{Ge(;%lYQ_aQFYq9NN&|1hfT{8P=W~UUb}_bTQH_|Vps>% z{;TrqmT{xrzqkbub=B^TqSijR1wI^xowWYVAaj!1i!2Q{o&3+Erm}xCvQu_0IC~%{ zCS)`fD>nT%{|OVz|FA0dx*$zKB+HUADa@%9T7TP{I8ew@;xA^N6Yl;*TA)q(ZoTpr zX#8{w)aIkSkT}%(DJNum-EZ=RE#64zHGR@%&hQN9{|Fx8P4TvC$;@*cf3tV`&SD!% zcw@n0;dgQ9PIbGD@$d4uv@iJ%V|9(R-VjPCQIpx;sS+fCE$FC1dk5|9dUimdoo*Igj9#>#OUcxcE;%Nky}yw1U|#rLt@xP ze#gX6n#ttc|Hs)|fW?(84Z{Nr?(Xgu+}+(>gKHpYfCP643^TX~cXtcHEqIVXkl>b} z34{>HHzd2+?0a|bbN`>GhckV;x~jTPcXdxybsux+5bpMFFIlN6SV$OAi0QJJbv4i; zD~h{}ir0wZawL5j!`Dg4Ss4|%vZ>QFT^ndCgi|ypg`13_v&HyqYN7L?CtC8?p_&@@ zT@ZKhU^`fE(gvHRS^4+`R(9Njcz>@Jx)pv;N3}D)Wn-va*tU$Ux5y&|%)2b`fjqm_2e2IQP_T}Lw1IhIN&?q_7JKa+f_}#s*(KR2*5TR*Fehv?SjCHWgo`4h0VSp^4?}iAlZGIKqxAR;T9Hv4bA| z6gGymO&bpFzU%HXXaq;^MAm#d-i?^%jix2)eXBNZC)OaT+tS&iz=_=4KaS01*2IlbYUm_XLd7&>sn!|Dobfuv=0B+)Yz&CZC4+w=a(=c*~2^ya}y> z0XhRIXapso61@5j;E7dLxR!!@HhE<-K#yVehG^&Er08ZgHz&LXH3iyXbfJ;cY-`g_ z`k@choWjt!&b2V^Z*wB_^(c4~GzQc6$2#UD@Y5rSW7dJ&0)gz$2-h;Kut>tah;by3 z-ly?5c|y;&nnHxmwlC*sLKQyiX6`)qzAWm#$~kU*^_C&%Q^Z};`@Gj8hakL@%xoc& zS@;v2NXf^3cNf9ikrQGz8@`dq(Dj}v+}`81nLTp53+Or_2N5XhDmXKYoriO{a_q_R zVn}qN*W)>q#7PbT_05R$ov9MhEkttd;^pLL8CqB(3L56F%j3YW7#geoXo!{-N}wiC zOsdZ!U2S#x$yvsu%ezs+lZPJV`8KsLSvM$c0DSJfka^}PQ&CH`6U z7ts8tw6r96`HUV(JP#%^_=_cT>8f%XrT{v=zvj`uRT{p@gQYtM=Fx5Vj0$xjtDqxvY+zC5ao?&FPEM$nSuikM`}K zBcnHTQvmFJm|fZNH`SahJ@~ZA6vTZrvv|#veXTo>MW&&re3-*cHq=I(Tl+j@#r)UO9~-o<)J`}m7kDK#G@!II3w#3K>l7N zhU~=)QeVpTq2q*zb1U1Iu6VFTSPJPgi*SxIdog#pgt1$=5QA?Jw_)ZD8pW({&c-ps z!snG3T)nMJWHNE}+W_s`SJ#}mOi}aiUj*T`KStf|h=?lh$9z9Rn|7C-O-($EtElim z5;w=^m_+|}+m%wUdh2Q8cfeg6!;CC(l1gI2hcgPghvWWxz4Tts{GbMSU{qzs;LDB- zGZ}Dk7prb9F;^}Px%hPLE6z7l=e6jAbhe(=I+8=g3QP`PBwnEof0!`SXrrtL(vND0 zfGDX3?4r)=7SPd(q_w3sz2|(yo-qbM!+7*v6foT#rDPSs4Pi~M64&M`n6Z4I~NYTK-6w!{5 z12Am^+_;;}7K6|`I}WMMtDY{g3|Bv`KZ1T+tfXi@{NFQmM>drhEy{nZ%7JIV-K8T} zVr1&#h#Nl>F%1|Lu<8O)jGQKHXWq#MWbRc~kc_Ja%?C~wX83|%Af7MXn5?l~IlLMh zra??6zieYy0&$4kZuMSFRC5`q7#SHlQAN;U8?HT|aQ5APR1?I#z!&$aVyHeh#c+XV zwvuG%sh+jrlya3b@qu2vwHQl%m3^`PUm$$5PIu?N>ZF~vq9v+XUdw~e5?R&ysaFmj zJgZn36&n*?Vr*A1p}S%_vdP_nuJ>08s}r9kdpA7xP#(G|5jx3l_2M6;D6M4|%c&9H z%&Iq6z_ii3UG1VpUu_6AgEjH4dQ5V__YZ{sl{bMn!pLPK1Rn{o4uMZ|Oa`byNmGf> z$Ne$c?W_%_ki0PRzcj21+Ax71ZTC2Rr^2%5IaZL~_%i&_zF&C`zZov02j zCh8|Ku`O{av74G#V&mZC$N(7dzlrA`x$JT-nmeCpv(o8HU?p_HD<=^m^c+nF%e%r` z`z|W|7gVG}9cmhE?;`0%na*3X9E$xO-BzE_l`!5GtsUiR(}V}bG@~r$bxg&bCEY(? zKeE*%Xa_;G4&Qy8)BKeq(ig+8`EQao;PF4kO=v6mU;yb~!vDG+)#HbD8)mvnXk&0r z`(aVc%s|X|5!=D$^I|x(V|{vv?Mv~rqn7^RDD-snSIG|b#S1yFvvQ%H5uF!F;phj#cvCSe$ zHJ1o0ortClC~gbOZjkm@QadR9Bi(nlK*9tY102j$h+cD* zt4n4=LR?SNSGCT+#q}VRKcoX5IB?3tB}he&He6`Y4~}aItKbfe(FwT=>NJn9i#UIJ zi1txETycqd+-Be$B^P<3fk)JR1R3bTugCIW7fvY)CJ$+fzp~9bQT@zZPJ6wMkw@RP zY+9sh{B;tR^w0_QX#M zAV1B(EpKc*lq+500ZFXV7ob()?m+QaxSjzAe}xBX6T@tc45y}gvvR*KmmWIaPB>*^ zH-=}--9ZM#YuQ66Jk_YJiuQ+b$9jB6Bo*{q^v95!DWMYtq)nA@zJEUWYw(s&v0mD?^kLki%yS3NNq1uA2 zHyJYYa(5jHsmP!)kI>)N$}=`)-~mLBShu(c zrAn9D0{crwG!UMTc|y0_g_NcNLqNI*fx=z80ZDNcSl^|}b0LV3b|cp13eC6_jY|Rf zV+uU1@BmeVF`FnA$P6Xa*iA@GV;k*+lEF*4QYI~7zWLxbxVQ$Gbl5l-Ye)vJLEcHWjZ!Tjxqhg~g!3pXIrNY-5?@#!`9 z74_|)6!mB_M$zR($ix!g@QUUW)?{pB_-Zo}4eU|n8I9H;^d6l}$-LMbw-sgbi}p-0 z901T&(aXFT-nvUkhBW3`@0HJk3oZ?pHiakjI0P=!c}c3}stpKvA=Ras_HS@G!N?N* z?PsxAY)=LpMsX8ov3L=jBvJQ9GJQ1_ut3aOZ+Swt0O*)Pcw_l{tzhb0rLky`jpGRa zeP;}OzL8TDZy92jIG2>pt;z=tA=lAT_c~n+cO8NTwht6w0gM~`;#V6g+Pq*4skJE; zV+Bl7W@U@|EKu_Cn2peaTPqE{`{nSo)Jrw}YzHG0%axJ1>!?h3E=f!;kt-aD z-Y?*{^(;opWACD&o%TYTMm&0)mO#^A63l~tZ{YRxGJ`xENoX|v>}~ql`Qg(AEm;`! zo+nV(*+{&3fY*pf$qbE|y%tP)GIG^s7*|zjMNcL*qlqV;_Lc61zna#JY|!Bj){2VY zY((QoS2DY{(#Jv&FUA0~wuZkhuBM3sUsI+7aQyIVEZA@e<&AXfvkqk%G*v&E{;MR&yMKsVVEEJ%(OlY-pS zM{^AaEPaQz!{o~PYzQ}Z;BfLIBSX+6=}2sFeH_~iw=xw!6Ajp+#U#P9(s8Y*@D_Ue zfm|c_cry~6q*fw%+6S)+?WogTJm=@{rUTE~p&G^H)9edpa|Hn#Xs?iZ zyCL+m@8!bfx;Vequy_77p+NO+_|`G=4gR*#<9LL<6z07@@c z=;=E-;<0xr1a+qN1q-NgpNxCmbDtYN;F)oTA9~7e(KaPlMM%8g9J(d;8wgkKb4_)y zLKG3vSbM-rF|qP1_IK@QL6#s(>nfS@q=Wzdud;eUD)wDF2}V1N`S0tlO4QK}LD#Kp zY+`Pg**aC{LVe_TFQ+~(TSq=BPRxqGIOM8{H)PMO^ib zwQEwbE8#{YVP8Qg?VuVgFVzx(9ykek09`Fu8fHcV_dGdmX%A{iVt= zZb5PWgH${Cq}XWumHi;}W(YG+r^a3Z>M#(^` z$^5566={3%c;<4@w@uxzc^!cz4+o*K2Oo3-Qv8zWzUib7@|}#E?k}ILVKI| z*gVJkuBHPvxC*-{QqUc_@BmpJLR~{ufP4=vOCgS&GbF}O^usVucT)RFA*Gepz}9)& z4npDav;9{w$RDY9bed6B*yxiBj@W9r%WzEdpS*GQ$!;n-dMz6q^-T}0cz|Es8^>_S zD;-m?tXR*hh0>J~e%`35N2fr|hUN*pmdo<0Zb((Q)st^cmrs5zK3>i{M<>w*(x?0M zf!neb^BYMtVU+;R#Q8P*sQ8_OmvJ=Qlv>j(Jx)|z!BnCVxSF)%!#q7#HN_eUW(p}Q z2}BkVs6d&tw;Y$AJ9vrC-K(D9;o<_TnTb}>2xCr@XK8k6YP?2@k79#83*F?}J&-x0 z)4}r21-zHgP#))N>`Uj|nwGZwI=EY-1DUmzL~tpUXw8~!2?uSxpN*)8(3W*mR)IY2 z7+DX7e5#FmKyjgGy9T#XCXqA%Fd`1-NT+GwG-*%qpH=IniKgZjYiHy%Hs@3zLe-k6 z88U1L7yt~jg(98bFjSM6AGGMoV+6CpvnDxW%Wn_5LCU#^q|3A*7&h=P&Gu5Kme&K7 zzddgrI2;SI;;z`$3$sTR$IRw|pM7;$Lg4l7F{|AN}s>Wrjn9$_EwZ*C9rOJvtCQvC(|@m7jC;(}HJiMthuXyB$8IM_R-B<&*;bIqgd?DY z5u-0j@XyrE`xboiMm$`!#>FfC9r-`k{rAQhXibUsD3H0|77S!=Db8yg1Ms;*V8KwaxCC54%FKniJ$I$usCS`Ko{g^cr@QD^j~OBF+x(gx#x7qP?zQpXReb?-E6 znj@E=(O2=mSz@K+R_o%j`Y%^0c#Wr6KG24k$Ma zBzLoai8W-*Z5m0ZPZ$x*X1-xgGU(ka;>L5H7RU9AyWc=R1|-gBbEzX_ zt4CKR#rC`4xMzDl*vzY{{MEwwNSw=nRpCYzWS(FloQRO;cXTds46|%YDmxiYi7Ug8 z0bqF-a44~oF@Xm)XIDL{Vx*Qk7em!Y^a54tU{~zhwcE=7MPxsi(g(|L#iVi~Ew{#+ zz7l5DtHK_1CQdx|PM8n(Tdt~Jy~1ZR=A%pc#oWJ%e;D;qRe@ES7A`q^e20nAAm`*H z;{~|MrFvpcfwN@>OvLU(#qAtXz2Hr-JzWAIK;9^E09E2g?N}9b{V!vNet>PJuh!+NOLGAHD03W z`zj?blI`Y;+IT0uR7TVJG(%DTN;1Q*t#C*0>S^4m!Q%US41AAoQ6@TJN|uYJRD_!m z_B^@L(4<)8WwFo==_>XuX8Zuy)Z}Ng<6u_97y#pt@8||X%I$(P(srE3h%^7Q&LW)l zldO}@%sE6D$BwBygm!WfI=yarLjuGbRnK^NNxeMZ>T@o126&c5Wk2YgQJQ){MGTW= zhv1DP=j|tyvZa$A=fM#SJ%S0Oq+#(`-t%2zPoUS1u~22)xA*5^dlZxeM-C>+oBg|T z+6RSBucOO%(1egSJd7GJQO~QM8<)nV+pFuPO2BNIDTc+rJ!4tul0ND_lg)<2p0K%$ z-sYN_y}&rJ!tTo{Sr4*ocL`+LkuZ1fx-&zw*!JDp)f?7JR&vu~4c zB#v)(&_GBuS)5Y*=ak)r$1eoG!Mg4aSkF-=YF*nD@xKixDG7PCDkzN&YI~O~xPT6L zQ2n;wEtgT93}X98syppMfR5_2T)LnPCC>&x5)2FSSRJV={V=~K8~gkQ27LPF^0*lJ zhJ%!Z7<%6I1-mljAW_=PwAB;61X@@~t3}H#Wn1&F@bbC=C!Ry)^39A(3^?Tz*bN zYu;y~{#0yA$Yj`5$!x! z4#uwzo|uXUHTbg2IxCo|Mh&53ksZdm(kFcfsC@xaZ(829pJVwUl^Z`2N@pYNs?U{8 zjiw5gLgY$|b5med`Br`G2RkM*T#nTNF!CfW6O{#t`Quj5Fxy*~0r(OfkwSP(kTeFx zpS)Xiv5;->+Y#G8{rIHCrE=i>{A(8tqK;f~BOUO?31h}Vh&B(@rRMAJOe37a;vHt} zLqz;oM6C91w#bOqd%{TF0tBS)fA?jH!2?dC#@T8GTjKOc0pa5?-Yf=F89a2dCkBYh zIM}mdL8umt<>%nZc0Ft|u8rjvG$M~WvQrYiiSvtF8h5F4^XtoxXs;#l?aVbaipb|$94kP7Z{2PIaCx?XW@aLzKMDnBuv=@n_*%$QHtj|!!mkl8`CT-#%Wn( zpaq1*kPUo4hpm#olJhlkE4GR~Aa*{Yw%)j|`I1$ipnK4%Z}Dxlq45oVCF(<~W=rP} z`u_<+wE6IhM>ZJ#<}+uzPrxM68xzq|O=EWkYA@L|%)1fM*DXt?rfA!bcZO9GykxF>F>+W}X^86j zXTD&+w0ckLFZ!5vEOAdG4&J5}O+gP?b0wa{l{UKQN9q)WcC#4L8Y6UC@MLvxB7Zcz!8j*) z8^Z>L;D{y<%0I_f25WvNPJFlU$Yi!~t~osqp*bPh2H+bUo25v=wy5qz;#e@c4NM+} zbe>)-B((5gcX?7WWdwkkKF3mLGf31nOXUGcm87Kbnt}d;3zOmm+i1iAq{??#j;Oet zP|MJt2Gf019z}anP75+9(-wRa{oqZ6thP}C6TnLdO<>Ut`ti!auMdCc*ZK)iM` z3)2WDLbR~oH9A3OGo|~h*rx9Q$7kCvs-*)8QGrPtE(9|M7=n%C{5b>@;{jT;_`LNz z05WP~PBO^@I349mYVG|Zz@RV423JS9o+pZn8OEz|N`j)JBL}X|UJ|RE3g#*~$D6l= zURVkFwUh>fY3Tz=Cr8x>RY0S7{HgQvx$}`(nnE6YM0&co&|rA8$q1eqJ?w25k}q>P z&rFwdUKRiV*TMMdeH%fpJ(uu-J(#E#6@}dDdGPl5QMj)MY%b`jWVOK1=Y~8}%b)x*;vQ^ttvXXT7*LT1or06`BcuANImtDOrJ8>#z zRsDWr6OYzhWf)!PJC1@Ws5dOIoOE0`Sk4Ns({;_J7-`RjK1l(6byG!hrl0HXTp-Y2 z=xmUCi(@bT(`Dh!2Dytk_Wk7^M7PC))DjCTbp+r!o>s~nRZe5nZYx@r96~DzTQ-Ln zQF0=HEAg%AqP~=8l|qO##(zWzF{+@0f{&I&M`2SUbi6EByNf8$ zqRLc*Bj*4**T6`Qz-+?x#bgF57T##6TZCOBc|)}gDN4K+B9<2T8w$R=wvQ_1D0us5 zSH8e9+h<1U(i|jnN~AWwzODXQ^w`N#Z0tyur11H8VPBZ(#5K*09%pmZwY#&2=tnIU zrv=~9ZzNO$?woV|mo&8khPyiJR~wFZYx!hR{Wde-Du*WYL6%Ii?()1j@hU6&dv~e| z0^)X0BeZ;{;$9GoW6~6GFc-7B)?Qw#pww~IUOW&V`7CEXD!?2s-lxk-@+Hk6%03^@ z_2brzRz?};NPZeE$+!(if&Y;V!cm#Usy7;GO@5g79H(nXB>JLeZ^t2#fEl!?Vi7jz z5jq1t;WgS`vqq$N@JSJO>OTSg2M)a!O7;ey+esT7O!F*0TVUX@(=FS_kFF#upZx^;E@vk%_&wE>_OzLWZep_iA!e}Tx9%9)VQfavT! zSKSZwie_+S6XCb0I1yRukIRo+&EQvMjSFBvE&n@;;u&0Hx(wg2dq>+xs43LM2fEBI z!Y)ZyUHZ07@)zO%fw!L^R+X-MiKuBIZ&bzAD6?U-jzbQLIJKwkX*(iW`JtTQ;Nhk`@=+GTHpBEDt~UM$;rw50e}UXn zCS6H3WhpI&1DF~?meIP-e)M#$3mYDw9lwU2^`nlrL!ceg3${Y3JHE3 z%YJKA++trt4c$G^x9syi#FxcoV8}ZEjMankarV%keak+dI=&e@39Z>hJ*KGFK%Ad0 zB=KiB-#u^VhMo5&d#Dqk=>Y-+fY+KRsU!rG$xNL2fQ-r`fs`7M2tyrAYq+LVfWwf| zjGKtTQ>I@hDdLhG$^G8OxAC@RJTZ{YRtCdrY|$VnK8 zk4Um%VW5Mc;^!C;{^gRDHUoGt2Yevc!a}c=7pKj~^&Z`GL~Qelcc)+V}s$S|SE$6KX?9;z8KR;lc{ZCYUq zE^dl20&HoNK;D*7j4AopJ%INpHvc$+$mGUOWVmUj;vc$P9WX^_rf%T;F%ee9x z`)H`7F|>;glutMv8?gx}^0eU+$JzxIGkq*lgspkr&)Tgc_6fq+V#YxC1_$~AnO$H~ z#<)_d4fx*233a=em3U(*HV6WPXW~_nc1Cnk2pdLOG9Kj4Ubc`!d{)x-zSnC| zYj(x`2>a7pRJ+qGLdAhaum0S&ZGOHd&MK0fmX?so`hjk}P-dH6s?ZGkK&wY3H(DbN zRTX{d%6T_dhmTI`^hNJlMCDTM>AE~a@R*{^3+#j#JiR%DtBzU$CbZ`zCQ7llu`g41 zJwUG3ei`S&5&?z~;@QfjlFpSVFY4?)QXCkLA!^v7H}PDoG8FOsD|wjLHf|Wu-ukgt z>GCJ{2mpFCs2 zjIRrKMRNR_-fHZwR~Y}83*~%ky9r_b^j!Yc1%1tbYLAeAP!D}jt-1^iBtIqlKMc35 z(&-{$WHD2e(!Cczl2}OwaXi}6DL&#^Gw9>X1a?@B_|4ktPRJ0j~KK0TJgF% z>F}>GwStvGHq*G#1xe!Ffy_VDXqvJRUSYfimb~mA3>!tr!KY_HU)*fyprY?z9eF_Y zL~CfMYPjWhOuv&cuWn@~R>mzE*QipTPk@Gm{fZg0!;lS2o(<6ZOS~;Rw9L|8OEI5g zYN?<1cHQq(f;!&?#;pvu+aLy7JURU1aF9_s-pbB*ot27I)B0QRus8!+tT+P|uPeWl zn!w$eT|{#v%_j#cl#LU*9i}2|LoIabZ{X9JnbU#xBN7Wa1F{NuPO-&t2~|7A;BhT* zlVEBvHxhKW16p>Lr?60Lvg2#tGYKp@*tx`G?UBRYR&0`BOh3pQI_%bONq;<{g)6-h zI%!IrN%0Di^h6>^i4Zmx+gxKx3j`|&Knn{){~ElM2|g}(-<>KW*55t#9k3XhjI8bB z^C;>RFiWY%yG#6GCk0qQ#Z7FZ<4G4Rwdn+AQHUI*IRjv*WmK>8HiERRS0wE$b02p= zph1$Uk*c~lf;~d+F4sTxN*7~W^;^QK##~)Vf0pp zmvdxEmd5T;;}kbV7JU*9gmO|qw5Q->=`%X10_+2piUXU@d{n8hDo~+{WIf=Jy*-iV z-EY$#Z2+3R)ax22K7m~dTFqX(Sy+|mp~evt1scbu80aZqG~>hEKF1cFQKme#B-aV? zYE+@uVoFiFYGpKBTy*)Gx{01b(DNX1;4LI|0k8;?aS<4LaFZAB;v%^6was^p>S{=#oB5q4Ie>gl-~h69+@;fHv)$ypxW1crJ+4 z{vcWx2=21y*%HNJ0+(s`pp8svPF7P(FYW397{x`;@ttwghqO{9l@m^PSr!;p8dg4m z$uZA&`5ue51kOWM#5;+_2U4T$)anMj+VWpI0tl=Rk zVqEn;5w&|`~~2BDXs`XjrS z$R@P^aw}8ORc;PKXEsJuXFPO94(GA3YrYjX1cHu6d>3$iT6CaibkTn39s1Chw_(5zdeIu71hJ(wC@Ee@{u2vvE2bu) zsB(Grk$C_(#~P}P9*k*4&6ie!FBGd3a1ZdKHv?$u$ux@esbfCHcE4hzEi4tXK!0e( zwc5)Zxyj`wX@DPNl|xg{rcy525R$AJiCrP@{!X8*mqg7=jpQS+NJc z%KczS1`6^l8tQ+38mE9}O|LZoPa9)RH_Y}(YoT6M2^+?q;b}*=i3`t){EI%$C;p5Lp`ko|^F`Y84yUN$N{Lm&d-K_Z!V+I(O_B*y{i( zAeOu}2XY55Mg&WjMQ2CA-4Hu-(I`AFP_*lB3 z0X){jNt=wV#pX~*4>enfN@C#ZeI7Zvrhc9(BlCfggOx&G+_SHj%ywPr6CUi|(31O$ z!8x4ub0AeeTOaWGc8@;0iTk34Afo&BdLe!qGBAI&QJ>|o@_tF z;m8PTo1_{bT$+@iz159GZR68${hA@3=PQ-%NiDO52u=_zC10{+*y4y!_KELrQ=Cx| zA(w<1a^j{|UFgFd5wgA87HWAFW-5SsH>G*SPfIjjx|$s5(5CU>B&B(u5^}RxZE-{< z0Dav?lbdV0yBgDGY%tUqe=p-84;2Modu8G`Izw~#58CqDHe-WsB@o(&*=&(6C?2k8 zO&(!_W&K?!S6uOS{5+62MuDa^jvldGcU69d*Hc#yu+GlDWSBsb&#~2QnxBlV-Q1=c zFJQt~(~P06i>eJkZF;asLUCQzVP-<6;Xhk0$C-GyAJrCgDYg6X_>nW6dOLTsXe$vb z7{^?QT_fh3vpO-kl)g?n)ftvAmRcjV{HW5n7#=~T8-&=tZ*)B;kFY9|~F3y$t# zwT9VNH^R($)qY59h$TgQ@6<~W#~H|Q>HbE!2`a&n-Qv_eMXDt&*Vl&@648Y5LEIET z1T~kk29)*0AmCo)(g^zKcBZ)^^o_D39sr3B=4_YSis2X=vRb0j`GI|T^@K4}r<3-Z zqN$Rb%+WO_SB7fvO_6s4r5C70<`}Xt5-=;ggxR5Bcxr1Q1LuehBpE&j@gjw_TmK8( z?jaBonlnKHi@f}(<`{-sf)3lG`QD>2mkaGrw{LRT?GtDPCHix_2djIKQ9NWnZ*_gZ zAiSQwJbV)OPNC$^lO9>^TLWQRa=gNMa8O6;rs2hu5mneOEe$&Kh?p;SWj3*gaDJo* z0cUybg3Gyp2(%ZyRvuGqonIdn@rYW}TeXLJ0JkNr)ji_Cd$QX|Lbka^1O?Zu4k;^d z1%>QWK}K)t4d|G3tp-3`1qgm1Eh*)fa;ufk;Yu(CFmzO3Tn{T3cATf$M+19vlWn z0`MI$|2z|A+@!G8^GtPQ22n#M|Etw0@0uTwhg>yyXKSR7AakvHj{kugC>KA z$X)y-y0+)lJ{C-Y%)W|>l4n4lBL)REAO;T^k@aQ5G!7tx#WnCFEIQl)s-jTVF|H{Y zgQzqN4s%gh%5eVK^X4SksZ%V6?8(xDseQWmVc#>;=?$99llnDLZb@7g^}y?pQ2+pp zL#h2Hc}Jvsjrq}M(msszQ_}-QWt+S=LY+FFU5Ud(AZlL2wXs1;6Bq9Vj~EVhj1kNC zK6e{@6&Z33Z(VT_8gLLu1~`1(3*7|^oFJF-NS&D?ecL-Gs7Wc09;p9&Hp$&>MRHLO zht{%{rBAy|+$eaA^6t)x(`s6>?G>@~6S`UtoCKMIaZKmK--9a2x1H?J zr>spWfPMJ^8=Bpxzp&sv;tGX%fM6@#C(H`hADsECSiPT!BT^+KD|E;$pf4(l3r^jF z;a9Dnv?B;n_EpDCF)A>KXEII65E}ksi~)Z-E4__eb43_q_<+$vtVUSzF@qv>>ae|2 z@M4AA2{NlvfWIX`j6E5)yuX9oORhZZM^g8VD1g6yO}>f)CijM@`ZS2MKAY05ZiUJI z?zYMvafJ;N=}y6#xc3Ull^oF$5Q<_cBzuEV>#&Wy90XZK>A8Nm=#1SPBp0&TdG_}H zPM@2C_B}oc1WL6kA4nx?kA3$Lt3Ty9+dVc3m{;k`_wDO}?jw4_1tpc$=0#q;wsG`U zbT97*%7|!ADVV(RioLh^o*z(}FX2sZU~2+G$h2Y?IfEH^S@2|{{OD9i4T6R$Uv25F zpOsqMAst^u{3&#!6ZoT3kjM=VN%aa6K6?2b)W$!JX zsZK#7vja()V49SpgM;vdfp`yyo9eCy#J6<=8x!lLzrzlvD}WK!x974%u6xk;JP`VN%@8HI8aXb7{pdE29o^X`rt$V8dJf8$ zoS(}=qBY(!3U-Z;N^kO%8BSuhN#aN%Z}Zwv?C=eSgX5$Xnp$L{UsRl^UIF*gRG#F7 zx$TQ67sSzhg�x>NtkmuU_# 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 - **主内存** :所有线程创建的实例对象都存放在主内存中,不管该实例对象是成员变量还是方法中的本地变量(也称局部变量) -> - **本地内存** :每个线程都有一个私有的本地内存来存储共享变量的副本,并且,每个线程只能访问自己的本地内存,无法访问其他线程的本地内存。本地内存是 JMM 抽象出来的一个概念,存储了主内存中的共享变量副本。 - -![JMM(Java 内存模型)](./images/interview-questions/jmm.png) - -### Java 内存区域和内存模型(JMM)有何区别? - -**Java 内存区域和内存模型是完全不一样的两个东西!!!** - -- Java 内存区域定义了JVM 在运行时如何分区存储程序数据,就比如说堆主要用于存放对象实例。 -- Java 内存模型抽象了线程和主内存之间的关系,就比如说线程之间的共享变量必须存储在主内存中,其目的是为了屏蔽系统和硬件的差异,避免一套代码在不同的平台下产生的效果不一致。 - ### 如何保证变量的可见性? -`volatile` 关键字可以保证变量的可见性,如果我们将变量声明为 **`volatile`** ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。 +在 Java 中,`volatile` 关键字可以保证变量的可见性,如果我们将变量声明为 **`volatile`** ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。 -![volatile关键字可见性](./images/interview-questions/jmm2.png) +![JMM(Java 内存模型)](./images/jmm/jmm.png) -### 什么是指令重排序?如何禁止指令重排序? +`volatile` 关键字其实并非是 Java 语言特有的,在 C 语言里也有,它最原始的意义就是禁用 CPU 缓存。如果我们将一个变量使用 `volatile` 修饰,这就指示 编译器,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。 -为了提升执行速度/性能,计算机在执行程序代码的时候,会对指令就行重排序。 +`volatile` 关键字能保证数据的可见性,但不能保证数据的原子性。`synchronized` 关键字两者都能保证。 -指令重排序简单来说就是系统在执行代码的时候并不一定是按照你写的代码的顺序依次执行。 +### 如何禁止指令重排序? -常见的重排序有下面 2 种情况: - -- **编译器优化重排** :编译器(包括 JVM、JIT 编译器等)在不改变单线程程序语义的前提下,重新安排语句的执行顺序。 -- **指令并行重排** :和编译器优化重排类似, - -另外,内存系统也会有“重排序”,但有不是真正意义上的重排序。在 JMM 里表现为主存和本地内存,而主存和本地内存的内容可能不一致,所以这也会导致程序表现出乱序的行为。 - -**指令重排序可以保证串行语义一致,但是没有义务保证多线程间的语义也一致**。所以在多线程下,指令重排序可能会导致一些问题。 - -**`volatile` 关键字除了可以保证变量的可见性,还有一个重要的作用就是防止 JVM 的指令重排序。** - -如果我们将变量声明为 **`volatile`** ,在对这个变量进行读写操作的时候,编译器会通过 **内存屏障** 来禁止指令重排序。 - -内存屏障(Memory Barrier,或有时叫做内存栅栏,Memory Fence)是一种CPU指令,用于控制特定条件下的重排序和内存可见性问题。Java编译器也会根据内存屏障的规则禁止重排序。 +**在 Java 中,`volatile` 关键字除了可以保证变量的可见性,还有一个重要的作用就是防止 JVM 的指令重排序。** 如果我们将变量声明为 **`volatile`** ,在对这个变量进行读写操作的时候,会通过插入特定的 **内存屏障** 的方式来禁止指令重排序。 在 Java 中,`Unsafe` 类提供了三个开箱即用的内存屏障相关的方法,屏蔽了操作系统底层的差异: @@ -86,7 +40,135 @@ public native void storeFence(); public native void fullFence(); ``` -理论上来说,你通过这个三个方法也可以实现和`volatile`禁止重排序一样的效果。 +理论上来说,你通过这个三个方法也可以实现和`volatile`禁止重排序一样的效果,只是会麻烦一些。 + +下面我以一个常见的面试题为例讲解一下 `volatile` 关键字禁止指令重排序的效果。 + +面试中面试官经常会说:“单例模式了解吗?来给我手写一下!给我解释一下双重检验锁方式实现单例模式的原理呗!” + +**双重校验锁实现对象单例(线程安全)** : + +```java +public class Singleton { + + private volatile static Singleton uniqueInstance; + + private Singleton() { + } + + public static Singleton getUniqueInstance() { + //先判断对象是否已经实例过,没有实例化过才进入加锁代码 + if (uniqueInstance == null) { + //类对象加锁 + synchronized (Singleton.class) { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + } + } + return uniqueInstance; + } +} +``` + +`uniqueInstance` 采用 `volatile` 关键字修饰也是很有必要的, `uniqueInstance = new Singleton();` 这段代码其实是分为三步执行: + +1. 为 `uniqueInstance` 分配内存空间 +2. 初始化 `uniqueInstance` +3. 将 `uniqueInstance` 指向分配的内存地址 + +但是由于 JVM 具有指令重排的特性,执行顺序有可能变成 1->3->2。指令重排在单线程环境下不会出现问题,但是在多线程环境下会导致一个线程获得还没有初始化的实例。例如,线程 T1 执行了 1 和 3,此时 T2 调用 `getUniqueInstance`() 后发现 `uniqueInstance` 不为空,因此返回 `uniqueInstance`,但此时 `uniqueInstance` 还未被初始化。 + +### volatile 可以保证原子性么? + +**`volatile` 关键字能保证变量的可见性,但不能保证对变量的操作是原子性的。** + +我们通过下面的代码即可证明: + +```java +/** + * 微信搜 JavaGuide 回复"面试突击"即可免费领取个人原创的 Java 面试手册 + * + * @author Guide哥 + * @date 2022/08/03 13:40 + **/ +public class VolatoleAtomicityDemo { + public volatile static int inc = 0; + + public void increase() { + inc++; + } + + public static void main(String[] args) throws InterruptedException { + ExecutorService threadPool = Executors.newFixedThreadPool(5); + VolatoleAtomicityDemo volatoleAtomicityDemo = new VolatoleAtomicityDemo(); + for (int i = 0; i < 5; i++) { + threadPool.execute(() -> { + for (int j = 0; j < 500; j++) { + volatoleAtomicityDemo.increase(); + } + }); + } + // 等待1.5秒,保证上面程序执行完成 + Thread.sleep(1500); + System.out.println(inc); + threadPool.shutdown(); + } +} +``` + +正常情况下,运行上面的代码理应输出 `2500`。但你真正运行了上面的代码之后,你会发现每次输出结果都小于 `2500`。 + +为什么会出现这种情况呢?不是说好了,`volatile` 可以保证变量的可见性嘛! + +也就是说,如果 `volatile` 能保证 `inc++` 操作的原子性的话。每个线程中对 `inc` 变量自增完之后,其他线程可以立即看到修改后的值。5 个线程分别进行了 500 次操作,那么最终 inc 的值应该是 5\*500=2500。 + +很多人会误认为自增操作 `inc++` 是原子性的,实际上,`inc++` 其实是一个复合操作,包括三步: + +1. 读取 inc 的值。 +2. 对 inc 加 1。 +3. 将 inc 的值写回内存。 + +`volatile` 是无法保证这三个操作是具有原子性的,有可能导致下面这种情况出现: + +1. 线程 1 对 `inc` 进行读取操作之后,还未对其进行修改。线程 2 又读取了 `inc`的值并对其进行修改(+1),再将`inc` 的值写回内存。 +2. 线程 2 操作完毕后,线程 1 对 `inc`的值进行修改(+1),再将`inc` 的值写回内存。 + +这也就导致两个线程分别对 `inc` 进行了一次自增操作后,`inc` 实际上只增加了 1。 + +其实,如果想要保证上面的代码运行正确也非常简单,利用 `synchronized` 、`Lock`或者`AtomicInteger`都可以。 + +使用 `synchronized` 改进: + +```java +public synchronized void increase() { + inc++; +} +``` + +使用 `AtomicInteger` 改进: + +```java +public AtomicInteger inc = new AtomicInteger(); + +public void increase() { + inc.getAndIncrement(); +} +``` + +使用 `ReentrantLock` 改进: + +```java +Lock lock = new ReentrantLock(); +public void increase() { + lock.lock(); + try { + inc++; + } finally { + lock.unlock(); + } +} +``` ## synchronized 关键字 @@ -149,47 +231,6 @@ synchronized(this) { - `synchronized` 关键字加到实例方法上是给对象实例上锁; - 尽量不要使用 `synchronized(String a)` 因为 JVM 中,字符串常量池具有缓存功能。 -下面我以一个常见的面试题为例讲解一下 `synchronized` 关键字的具体使用。 - -面试中面试官经常会说:“单例模式了解吗?来给我手写一下!给我解释一下双重检验锁方式实现单例模式的原理呗!” - -**双重校验锁实现对象单例(线程安全)** - -```java -public class Singleton { - - private volatile static Singleton uniqueInstance; - - private Singleton() { - } - - public static Singleton getUniqueInstance() { - //先判断对象是否已经实例过,没有实例化过才进入加锁代码 - if (uniqueInstance == null) { - //类对象加锁 - synchronized (Singleton.class) { - if (uniqueInstance == null) { - uniqueInstance = new Singleton(); - } - } - } - return uniqueInstance; - } -} -``` - -另外,需要注意 `uniqueInstance` 采用 `volatile` 关键字修饰也是很有必要。 - -`uniqueInstance` 采用 `volatile` 关键字修饰也是很有必要的, `uniqueInstance = new Singleton();` 这段代码其实是分为三步执行: - -1. 为 `uniqueInstance` 分配内存空间 -2. 初始化 `uniqueInstance` -3. 将 `uniqueInstance` 指向分配的内存地址 - -但是由于 JVM 具有指令重排的特性,执行顺序有可能变成 1->3->2。指令重排在单线程环境下不会出现问题,但是在多线程环境下会导致一个线程获得还没有初始化的实例。例如,线程 T1 执行了 1 和 3,此时 T2 调用 `getUniqueInstance`() 后发现 `uniqueInstance` 不为空,因此返回 `uniqueInstance`,但此时 `uniqueInstance` 还未被初始化。 - -使用 `volatile` 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行。 - ### 构造方法可以使用 synchronized 关键字修饰么? 先说结论:**构造方法不能使用 synchronized 关键字修饰。** @@ -227,13 +268,11 @@ public class SynchronizedDemo { 在执行`monitorenter`时,会尝试获取对象的锁,如果锁的计数器为 0 则表示锁可以被获取,获取后将锁计数器设为 1 也就是加 1。 -![执行 monitorenter 获取锁](./images/interview-questions/synchronized-get-lock-code-block.png) +![执行 monitorenter 获取锁](./images/interview-questions/synchronized-get-lock-code-block.jpg) 对象锁的的拥有者线程才可以执行 `monitorexit` 指令来释放锁。在执行 `monitorexit` 指令后,将锁计数器设为 0,表明锁被释放,其他线程可以尝试获取锁。 - - -![执行 monitorexit 释放锁](./images/interview-questions/synchronized-release-lock-block.png) +![执行 monitorexit 释放锁](./images/interview-questions/synchronized-release-lock-block.jpg) 如果获取对象锁失败,那当前线程就要阻塞等待,直到锁被另外一个线程释放为止。 @@ -262,9 +301,9 @@ public class SynchronizedDemo2 { **不过两者的本质都是对对象监视器 monitor 的获取。** -相关推荐:[Java锁与线程的那些事 - 有赞技术团队](https://tech.youzan.com/javasuo-yu-xian-cheng-de-na-xie-shi/) 。 +相关推荐:[Java 锁与线程的那些事 - 有赞技术团队](https://tech.youzan.com/javasuo-yu-xian-cheng-de-na-xie-shi/) 。 -🧗🏻进阶一下:学有余力的小伙伴可以抽时间详细研究一下对象监视器 `monitor`。 +🧗🏻 进阶一下:学有余力的小伙伴可以抽时间详细研究一下对象监视器 `monitor`。 ### JDK1.6 之后的 synchronized 关键字底层做了哪些优化? @@ -274,11 +313,11 @@ JDK1.6 对锁的实现引入了大量的优化,如偏向锁、轻量级锁、 关于这几种优化的详细信息可以查看下面这篇文章:[Java6 及以上版本对 synchronized 的优化](https://www.cnblogs.com/wuqinglong/p/9945618.html) -### synchronized 和 volatile 的区别? +### synchronized 和 volatile 的区别? `synchronized` 关键字和 `volatile` 关键字是两个互补的存在,而不是对立的存在! -- `volatile` 关键字是线程同步的轻量级实现,所以 `volatile `性能肯定比` synchronized `关键字要好 。但是 `volatile` 关键字只能用于变量而 `synchronized` 关键字可以修饰方法以及代码块 。 +- `volatile` 关键字是线程同步的轻量级实现,所以 `volatile`性能肯定比`synchronized`关键字要好 。但是 `volatile` 关键字只能用于变量而 `synchronized` 关键字可以修饰方法以及代码块 。 - `volatile` 关键字能保证数据的可见性,但不能保证数据的原子性。`synchronized` 关键字两者都能保证。 - `volatile`关键字主要用于解决变量在多个线程之间的可见性,而 `synchronized` 关键字解决的是多个线程之间访问资源的同步性。 @@ -304,27 +343,21 @@ JDK1.6 对锁的实现引入了大量的优化,如偏向锁、轻量级锁、 **如果你想使用上述功能,那么选择 ReentrantLock 是一个不错的选择。性能已不是选择标准** -### 并发编程的三个重要特性 - -1. **原子性** : 一次操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么都不执行。`synchronized` 可以保证代码片段的原子性。 -2. **可见性** :当一个线程对共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。`volatile` 关键字可以保证共享变量的可见性。 -3. **有序性** :代码在执行的过程中的先后顺序,Java 在编译器以及运行期间的优化,代码的执行顺序未必就是编写代码时候的顺序。`volatile` 关键字可以禁止指令进行重排序优化。 - ## ThreadLocal -### ThreadLocal 简介 +### ThreadLocal 有什么用? -通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。**如果想实现每一个线程都有自己的专属本地变量该如何解决呢?** JDK 中提供的`ThreadLocal`类正是为了解决这样的问题。 **`ThreadLocal`类主要解决的就是让每个线程绑定自己的值,可以将`ThreadLocal`类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。** +通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。**如果想实现每一个线程都有自己的专属本地变量该如何解决呢?** -**如果你创建了一个`ThreadLocal`变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是`ThreadLocal`变量名的由来。他们可以使用 `get()` 和 `set()` 方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。** +JDK 中自带的`ThreadLocal`类正是为了解决这样的问题。 **`ThreadLocal`类主要解决的就是让每个线程绑定自己的值,可以将`ThreadLocal`类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。** -再举个简单的例子: +如果你创建了一个`ThreadLocal`变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是`ThreadLocal`变量名的由来。他们可以使用 `get()` 和 `set()` 方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。 -比如有两个人去宝屋收集宝物,这两个共用一个袋子的话肯定会产生争执,但是给他们两个人每个人分配一个袋子的话就不会出现这样的问题。如果把这两个人比作线程的话,那么 ThreadLocal 就是用来避免这两个线程竞争的。 +再举个简单的例子:两个人去宝屋收集宝物,这两个共用一个袋子的话肯定会产生争执,但是给他们两个人每个人分配一个袋子的话就不会出现这样的问题。如果把这两个人比作线程的话,那么 ThreadLocal 就是用来避免这两个线程竞争的。 -### ThreadLocal 示例 +### 如何使用 ThreadLocal? -相信看了上面的解释,大家已经搞懂 ThreadLocal 类是个什么东西了。 +相信看了上面的解释,大家已经搞懂 `ThreadLocal` 类是个什么东西了。下面简单演示一下如何在项目中实际使用 `ThreadLocal` 。 ```java import java.text.SimpleDateFormat; @@ -362,7 +395,7 @@ public class ThreadLocalExample implements Runnable{ ``` -Output: +输出结果 : ``` Thread Name= 0 default Formatter = yyyyMMdd HHmm @@ -387,7 +420,7 @@ Thread Name= 8 formatter = yy-M-d ah:mm Thread Name= 9 formatter = yy-M-d ah:mm ``` -从输出中可以看出,Thread-0 已经改变了 formatter 的值,但仍然是 thread-2 默认格式化程序与初始化值相同,其他线程也一样。 +从输出中可以看出,虽然 `Thread-0` 已经改变了 `formatter` 的值,但 `Thread-1` 默认格式化值与初始化值相同,其他线程也一样。 上面有一段代码用到了创建 `ThreadLocal` 变量的那段代码用到了 Java8 的知识,它等于下面这段代码,如果你写了下面这段代码的话,IDEA 会提示你转换为 Java8 的格式(IDEA 真的不错!)。因为 ThreadLocal 类在 Java 8 中扩展,使用一个新的方法`withInitial()`,将 Supplier 功能接口作为参数。 @@ -400,7 +433,7 @@ private static final ThreadLocal formatter = new ThreadLocal firstKey, Object firstValue) { 比如我们在同一个线程中声明了两个 `ThreadLocal` 对象的话, `Thread`内部都是使用仅有的那个`ThreadLocalMap` 存放数据的,`ThreadLocalMap`的 key 就是 `ThreadLocal`对象,value 就是 `ThreadLocal` 对象调用`set`方法设置的值。 -![ThreadLocal数据结构](./images/threadlocal数据结构.png) +`ThreadLocal` 数据结构如下图所示: + +![threadlocal-data-structure](images/interview-questions/threadlocal-data-structure.jpg) `ThreadLocalMap`是`ThreadLocal`的静态内部类。 -![ThreadLocal内部类](./images/ThreadLocal内部类.png) +![ThreadLocal内部类](./images/interview-questions/thread-local-inner-class.png) -### ThreadLocal 内存泄露问题 +### ThreadLocal 内存泄露问题是怎么导致的? -`ThreadLocalMap` 中使用的 key 为 `ThreadLocal` 的弱引用,而 value 是强引用。所以,如果 `ThreadLocal` 没有被外部强引用的情况下,在垃圾回收的时候,key 会被清理掉,而 value 不会被清理掉。这样一来,`ThreadLocalMap` 中就会出现 key 为 null 的 Entry。假如我们不做任何措施的话,value 永远无法被 GC 回收,这个时候就可能会产生内存泄露。ThreadLocalMap 实现中已经考虑了这种情况,在调用 `set()`、`get()`、`remove()` 方法的时候,会清理掉 key 为 null 的记录。使用完 `ThreadLocal`方法后 最好手动调用`remove()`方法 +`ThreadLocalMap` 中使用的 key 为 `ThreadLocal` 的弱引用,而 value 是强引用。所以,如果 `ThreadLocal` 没有被外部强引用的情况下,在垃圾回收的时候,key 会被清理掉,而 value 不会被清理掉。 + +这样一来,`ThreadLocalMap` 中就会出现 key 为 null 的 Entry。假如我们不做任何措施的话,value 永远无法被 GC 回收,这个时候就可能会产生内存泄露。`ThreadLocalMap` 实现中已经考虑了这种情况,在调用 `set()`、`get()`、`remove()` 方法的时候,会清理掉 key 为 null 的记录。使用完 `ThreadLocal`方法后 最好手动调用`remove()`方法 ```java static class Entry extends WeakReference> { @@ -478,9 +515,6 @@ static class Entry extends WeakReference> { - 《深入理解 Java 虚拟机》 - 《实战 Java 高并发程序设计》 -- 《Java 并发编程的艺术》 -- 《深入浅出Java多线程》:http://concurrent.redspider.group/RedSpider.html -- Java内存访问重排序的研究:https://tech.meituan.com/2014/09/23/java-memory-reordering.html -- 嘿,同学,你要的 Java 内存模型 (JMM) 来了:https://xie.infoq.cn/article/739920a92d0d27e2053174ef2 -- Java并发之AQS详解:https://www.cnblogs.com/waterystone/p/4920797.html -- Java并发包基石-AQS详解:https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html +- Guide to the Volatile Keyword in Java - Baeldung:https://www.baeldung.com/java-volatile +- 理解 Java 中的 ThreadLocal - 技术小黑屋:https://droidyue.com/blog/2016/03/13/learning-threadlocal-in-java/ +- ThreadLocal (Java Platform SE 8 ) - Oracle Help Center:https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html diff --git a/docs/java/concurrent/java-concurrent-questions-03.md b/docs/java/concurrent/java-concurrent-questions-03.md index 466358c4..fd3e7495 100644 --- a/docs/java/concurrent/java-concurrent-questions-03.md +++ b/docs/java/concurrent/java-concurrent-questions-03.md @@ -7,6 +7,7 @@ head: - - meta - name: keywords content: 多线程,死锁,线程池,CAS,AQS + - - meta - name: description content: Java并发常见知识点和面试题总结(含详细解答),希望对你有帮助! --- diff --git a/docs/java/concurrent/jmm.md b/docs/java/concurrent/jmm.md new file mode 100644 index 00000000..bd887fa1 --- /dev/null +++ b/docs/java/concurrent/jmm.md @@ -0,0 +1,232 @@ +--- +title: JMM(Java 内存模型)详解 +category: Java +tag: + - Java并发 +head: + - - meta + - name: keywords + content: CPU 缓存模型,指令重排序,Java 内存模型(JMM),happens-before + - - meta + - name: description + content: 对于 Java 来说,你可以把 JMM 看作是 Java 定义的并发编程相关的一组规范,除了抽象了线程和主内存之间的关系之外,其还规定了从 Java 源代码到 CPU 可执行指令的这个转化过程要遵守哪些和并发相关的原则和规范,其主要目的是为了简化多线程编程,增强程序可移植性的。 +--- + +要想理解透彻 JMM(Java 内存模型),我们先要从 **CPU 缓存模型和指令重排序** 说起! + +## 从 CPU 缓存模型说起 + +**为什么要弄一个 CPU 高速缓存呢?** 类比我们开发网站后台系统使用的缓存(比如 Redis)是为了解决程序处理速度和访问常规关系型数据库速度不对等的问题。 **CPU 缓存则是为了解决 CPU 处理速度和内存处理速度不对等的问题。** + +我们甚至可以把 **内存可以看作外存的高速缓存**,程序运行的时候我们把外存的数据复制到内存,由于内存的处理速度远远高于外存,这样提高了处理速度。 + +总结:**CPU Cache 缓存的是内存数据用于解决 CPU 处理速度和内存不匹配的问题,内存缓存的是硬盘数据用于解决硬盘访问速度过慢的问题。** + +为了更好地理解,我画了一个简单的 CPU Cache 示意图如下(实际上,现代的 CPU Cache 通常分为三层,分别叫 L1,L2,L3 Cache): + +![CPU 缓存模型示意图](./images/jmm/cpu-cache.png) + +**CPU Cache 的工作方式:** 先复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。但是,这样存在 **内存缓存不一致性的问题** !比如我执行一个 i++操作的话,如果两个线程同时执行的话,假设两个线程从 CPU Cache 中读取的 i=1,两个线程做了 1++运算完之后再写回 Main Memory 之后 i=2,而正确结果应该是 i=3。 + +**CPU 为了解决内存缓存不一致性问题可以通过制定缓存一致协议(比如 [MESI 协议](https://zh.wikipedia.org/wiki/MESI%E5%8D%8F%E8%AE%AE))或者其他手段来解决。** 这个缓存缓存一致性协议指的是在 CPU 高速缓存与主内存交互的时候需要准守的原则和规范。不同的 CPU 中,使用的缓存一致性协议通常也会有所不同。 + +![缓存一致性协议](./images/jmm/cpu-cache-protocol.jpg) + +我们的程序运行在操作系统之上,操作系统屏蔽了底层硬件的操作细节,将各种硬件资源虚拟化。于是,操作系统也就同样需要解决内存缓存不一致性问题。 + +操作系统通过 **内存模型(Memory Model)** 定义一系列规范来解决这个问题。无论是 Windows 系统,还是 Linux 系统,它们都有特定的内存模型。 + +## 指令重排序 + +说完了 CPU 缓存模型,我们再来看看另外一个比较重要的概念 **指令重排序** ,这同样 + +为了提升执行速度/性能,计算机在执行程序代码的时候,会对指令进行重排序。 + +**什么是指令重排序?** 简单来说就是系统在执行代码的时候并不一定是按照你写的代码的顺序依次执行。 + +常见的指令重排序有下面 2 种情况: + +- **编译器优化重排** :编译器(包括 JVM、JIT 编译器等)在不改变单线程程序语义的前提下,重新安排语句的执行顺序。 +- **指令并行重排** :现代处理器采用了指令级并行技术(Instruction-Level Parallelism,ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。 + +另外,内存系统也会有“重排序”,但有不是真正意义上的重排序。在 JMM 里表现为主存和本地内存的内容可能不一致,进而导致程序在多线程下执行可能出现问题。 + +Java 源代码会经历 **编译器优化重排 —> 指令并行重排 —> 内存系统重排** 的过程,最终才变成操作系统可执行的指令序列。 + +**指令重排序可以保证串行语义一致,但是没有义务保证多线程间的语义也一致** ,所以在多线程下,指令重排序可能会导致一些问题。 + +编译器和处理器的指令重排序的处理方式不一样。对于编译器,通过禁止特定类型的编译器的当时来禁止重排序。对于处理器,通过插入内存屏障(Memory Barrier,或有时叫做内存栅栏,Memory Fence)的方式来禁止特定类型的处理器重排序。指令并行重排和内存系统重排都属于是处理器级别的指令重排序。 + +> 内存屏障(Memory Barrier,或有时叫做内存栅栏,Memory Fence)是一种 CPU 指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障指令执行的有序性。另外,为了达到屏障的效果,它也会使处理器写入、读取值之前,将主内存的值写入高速缓存,清空无效队列,从而保障变量的可见性。 + +## JMM(Java Memory Model) + +### 什么是 JMM?为什么需要 JMM? + +Java 是最早尝试提供内存模型的编程语言。由于早期内存模型存在一些缺陷(比如非常容易削弱编译器的优化能力),从 Java5 开始,Java 开始使用新的内存模型 [《JSR-133:Java Memory Model and Thread Specification》](http://www.cs.umd.edu/~pugh/java/memoryModel/CommunityReview.pdf) 。 + +一般来说,编程语言也可以直接复用操作系统层面的内存模型。不过,不同的操作系统内存模型不同。如果直接复用操作系统层面的内存模型,就可能会导致同样一套代码换了一个操作系统就无法执行了。Java 语言是跨平台的,它需要自己提供一套内存模型以屏蔽系统差异。 + +这只是 JMM 存在的其中一个原因。实际上,对于 Java 来说,你可以把 JMM 看作是 Java 定义的并发编程相关的一组规范,除了抽象了线程和主内存之间的关系之外,其还规定了从 Java 源代码到 CPU 可执行指令的这个转化过程要遵守哪些和并发相关的原则和规范,其主要目的是为了简化多线程编程,增强程序可移植性的。 + +**为什么要遵守这些并发相关的原则和规范呢?** 这是因为并发编程下,像 CPU 多级缓存和指令重排这类设计可能会导致程序运行出现一些问题。就比如说我们上面提到的指令重排序就可能会让多线程程序的执行出现问题,为此,JMM 抽象了 happens-before 原则(后文会详细介绍到)来解决这个指令重排序问题。 + +JMM 说白了就是定义了一些规范来解决这些问题,开发发者可以利用这些规范更方便地开发多线程程序。对于 Java 开发者说,你不需要了解底层原理,直接使用并发相关的一些关键字和类(比如 `volatile`、`synchronized`、各种 `Lock`)即可开发出并发安全的程序。 + +### JMM 是如何抽象线程和主内存之间的关系? + +**Java 内存模型(JMM)** 抽象了线程和主内存之间的关系,就比如说线程之间的共享变量必须存储在主内存中。 + +在 JDK1.2 之前,Java 的内存模型实现总是从 **主存** (即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存 **本地内存** (比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。 + +这和我们上面讲到的 CPU 缓存模型非常相似。 + +**什么是主内存?什么是本地内存?** + +- **主内存** :所有线程创建的实例对象都存放在主内存中,不管该实例对象是成员变量还是方法中的本地变量(也称局部变量) +- **本地内存** :每个线程都有一个私有的本地内存来存储共享变量的副本,并且,每个线程只能访问自己的本地内存,无法访问其他线程的本地内存。本地内存是 JMM 抽象出来的一个概念,存储了主内存中的共享变量副本。 + +Java 内存模型的抽象示意图如下: + +![JMM(Java 内存模型)](./images/jmm/jmm.png) + +从上图来看,线程 1 与线程 2 之间如果要进行通信的话,必须要经历下面 2 个步骤: + +1. 线程 1 把本地内存中修改过的共享变量副本的值同步到主内存中去。 +2. 线程 2 到主存中读取对应的共享变量的值。 + +也就是说,JMM 为共享变量提供了可见性的保障。 + +不过,多线程下,对主内存中的一个共享变量进行操作有可能诱发线程安全问题。举个例子: + +1. 线程 1 和线程 2 分别对同一个共享变量进行操作,一个执行修改,一个执行读取。 +2. 线程 2 读取到的是线程 1 修改之前的值还是修改后的值并不确定,都有可能,因为线程 1 和线程 2 都是先将共享变量从主内存拷贝到对应线程的工作内存中。 + +关于主内存与工作内存直接的具体交互协议,即一个变量如何从主内存拷贝到工作内存,如何从工作内存同步到主内存之间的实现细节,Java 内存模型定义来以下八种同步操作(了解即可,无需死记硬背): + +- **锁定(lock)**: 作用于主内存中的变量,将他标记为一个线程独享变量。 +- **解锁(unlock)**: 作用于主内存中的变量,解除变量的锁定状态,被解除锁定状态的变量才能被其他线程锁定。 +- **read(读取)**:作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存中,以便随后的 load 动作使用。 +- **load(载入)**:把 read 操作从主内存中得到的变量值放入工作内存的变量的副本中。 +- **use(使用)**:把工作内存中的一个变量的值传给执行引擎,每当虚拟机遇到一个使用到变量的指令时都会使用该指令。 +- **assign(赋值)**:作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存的变量,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。 +- **store(存储)**:作用于工作内存的变量,它把工作内存中一个变量的值传送到主内存中,以便随后的 write 操作使用。 +- **write(写入)**:作用于主内存的变量,它把 store 操作从工作内存中得到的变量的值放入主内存的变量中。 + +除了这 8 种同步操作之外,还规定了下面这些同步规则来保证这些同步操作的正确执行(了解即可,无需死记硬背): + +- 不允许一个线程无原因地(没有发生过任何 assign 操作)把数据从线程的工作内存同步回主内存中。 +- 一个新的变量只能在主内存中 “诞生”,不允许在工作内存中直接使用一个未被初始化(load 或 assign)的变量,换句话说就是对一个变量实施 use 和 store 操作之前,必须先执行过了 assign 和 load 操作。 +- 一个变量在同一个时刻只允许一条线程对其进行 lock 操作,但 lock 操作可以被同一条线程重复执行多次,多次执行 lock 后,只有执行相同次数的 unlock 操作,变量才会被解锁。 +- 如果对一个变量执行 lock 操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前,需要重新执行 load 或 assign 操作初始化变量的值。 +- 如果一个变量事先没有被 lock 操作锁定,则不允许对它执行 unlock 操作,也不允许去 unlock 一个被其他线程锁定住的变量。 +- ...... + +### Java 内存区域和 JMM 有何区别? + +这是一个比较常见的问题,很多初学者非常容易搞混。 **Java 内存区域和内存模型是完全不一样的两个东西** : + +- JVM 内存结构和 Java 虚拟机的运行时区域相关,定义了 JVM 在运行时如何分区存储程序数据,就比如说堆主要用于存放对象实例。 +- Java 内存模型和 Java 的并发编程相关,抽象了线程和主内存之间的关系就比如说线程之间的共享变量必须存储在主内存中,规定了从 Java 源代码到 CPU 可执行指令的这个转化过程要遵守哪些和并发相关的原则和规范,其主要目的是为了简化多线程编程,增强程序可移植性的。 + +### happens-before 原则是什么? + +happens-before 这个概念最早诞生于 Leslie Lamport 于 1978 年发表的论文[《Time,Clocks and the Ordering of Events in a Distributed System》](https://lamport.azurewebsites.net/pubs/time-clocks.pdf)。在这篇论文中,Leslie Lamport 提出了[逻辑时钟](https://writings.sh/post/logical-clocks)的概念,这也成了第一个逻辑时钟算法 。在分布式环境中,通过一系列规则来定义逻辑时钟的变化,从而能通过逻辑时钟来对分布式系统中的事件的先后顺序进行判断。**逻辑时钟并不度量时间本身,仅区分事件发生的前后顺序,其本质就是定义了一种 happens-before 关系。** + +上面提到的 happens-before 这个概念诞生的背景并不是重点,简单了解即可。 + +JSR 133 引入了 happens-before 这个概念来描述两个操作之间的内存可见性。 + +**为什么需要 happens-before 原则?** happens-before 原则的诞生是为了程序员和编译器、处理器之间的平衡。程序员追求的是易于理解和编程的强内存模型,遵守既定规则编码即可。编译器和处理器追求的是较少约束的弱内存模型,让它们尽己所能地去优化性能,让性能最大化。happens-before 原则的设计思想其实非常简单: + +- 为了对编译器和处理器的约束尽可能少,只要不改变程序的执行结果(单线程程序和正确执行的多线程程序),编译器和处理器怎么进行重排序优化都行。 +- 对于会改变程序执行结果的重排序,JMM 要求编译器和处理器必须禁止这种重排序。 + +下面这张是 《Java 并发编程的艺术》这本书中的一张 JMM 设计思想的示意图,非常清晰。 + +![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/concurrent/image-20220731155332375.png) + +了解了 happens-before 原则的设计思想,我们再来看看 JSR-133 对 happens-before 原则的定义: + +- 如果一个操作 happens-before 另一个操作,那么第一个操作的执行结果将对第二个操作可见,并且第一个操作的执行顺序排在第二个操作之前。 +- 两个操作之间存在 happens-before 关系,并不意味着 Java 平台的具体实现必须要按照 happens-before 关系指定的顺序来执行。如果重排序之后的执行结果,与按 happens-before 关系来执行的结果一致,那么 JMM 也允许这样的重排序。 + +我们看下面这段代码: + +```java +int userNum = getUserNum(); // 1 +int teacherNum = getTeacherNum(); // 2 +int totalNum = userNum + teacherNum; // 3 +``` + +- 1 happens-before 2 +- 2 happens-before 3 +- 1 happens-before 3 + +虽然 1 happens-before 2,但对 1 和 2 进行重排序不会影响代码的执行结果,所以 JMM 是允许编译器和处理器执行这种重排序的。但 1 和 2 必须是在 3 执行之前,也就是说 1,2 happens-before 3 。 + +**happens-before 原则表达的意义其实并不是一个操作发生在另外一个操作的前面,虽然这从程序员的角度上来说也并无大碍。更准确地来说,它更想表达的意义是前一个操作的结果对于后一个操作是可见的,无论这两个操作是否在同一个线程里。** + +举个例子:操作 1 happens-before 操作 2,即使操作 1 和操作 2 不在同一个线程内,JMM 也会保证操作 1 的结果对操作 2 是可见的。 + +### happens-before 常见规则有哪些?谈谈你的理解? + +happens-before 的规则就 8 条,说多不多,重点了解下面列举的 5 条即可。全记是不可能的,很快就忘记了,意义不大,随时查阅即可。 + +1. **程序顺序规则** :一个线程内,按照代码顺序,书写在前面的操作 happens-before 于书写在后面的操作; +2. **解锁规则** :解锁 happens-before 于加锁; +3. **volatile 变量规则** :对一个 volatile 变量的写操作 happens-before 于后面对这个 volatile 变量的读操作。说白了就是对 volatile 变量的写操作的结果对于发生于其后的任何操作都是可见的。 +4. **传递规则** :如果 A happens-before B,且 B happens-before C,那么 A happens-before C; +5. **线程启动规则** :Thread 对象的 `start()`方法 happens-before 于此线程的每一个动作。 + +如果两个操作不满足上述任意一个 happens-before 规则,那么这两个操作就没有顺序的保障,JVM 可以对这两个操作进行重排序。 + +### happens-before 和 JMM 什么关系? + +happens-before 与 JMM 的关系用《Java 并发编程的艺术》这本书中的一张图就可以非常好的解释清楚。 + +![happens-before 与 JMM 的关系](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/concurrent/image-20220731084604667.png) + +## 再看并发编程三个重要特性 + +### 原子性 + +一次操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么都不执行。 + +在 Java 中,可以借助`synchronized` 、各种 `Lock` 以及各种原子类实现原子性。 + +`synchronized` 和各种 `Lock` 可以保证任一时刻只有一个线程访问该代码块,因此可以保障原子性。各种原子类是利用 CAS (compare and swap) 操作(可能也会用到 `volatile`或者`final`关键字)来保证原子操作。 + +### 可见性 + +当一个线程对共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。 + +在 Java 中,可以借助`synchronized` 、`volatile` 以及各种 `Lock` 实现可见性。 + +如果我们将变量声明为 `volatile` ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。 + +### 有序性 + +由于指令重排序问题,代码的执行顺序未必就是编写代码时候的顺序。 + +我们上面讲重排序的时候也提到过: + +> **指令重排序可以保证串行语义一致,但是没有义务保证多线程间的语义也一致** ,所以在多线程下,指令重排序可能会导致一些问题。 + +在 Java 中,`volatile` 关键字可以禁止指令进行重排序优化。 + +## 总结 + +- Java 是最早尝试提供内存模型的语言,其主要目的是为了简化多线程编程,增强程序可移植性的。 +- CPU 可以通过制定缓存一致协议(比如 [MESI 协议](https://zh.wikipedia.org/wiki/MESI%E5%8D%8F%E8%AE%AE))来解决内存缓存不一致性问题。 +- 为了提升执行速度/性能,计算机在执行程序代码的时候,会对指令进行重排序。 简单来说就是系统在执行代码的时候并不一定是按照你写的代码的顺序依次执行。**指令重排序可以保证串行语义一致,但是没有义务保证多线程间的语义也一致** ,所以在多线程下,指令重排序可能会导致一些问题。 +- 你可以把 JMM 看作是 Java 定义的并发编程相关的一组规范,除了抽象了线程和主内存之间的关系之外,其还规定了从 Java 源代码到 CPU 可执行指令的这个转化过程要遵守哪些和并发相关的原则和规范,其主要目的是为了简化多线程编程,增强程序可移植性的。 +- JSR 133 引入了 happens-before 这个概念来描述两个操作之间的内存可见性。 + +## 参考 + +- 《Java 并发编程的艺术》第三章 Java 内存模型 +- 《深入浅出 Java 多线程》:http://concurrent.redspider.group/RedSpider.html +- Java 内存访问重排序的研究:https://tech.meituan.com/2014/09/23/java-memory-reordering.html +- 嘿,同学,你要的 Java 内存模型 (JMM) 来了:https://xie.infoq.cn/article/739920a92d0d27e2053174ef2 +- JSR 133 (Java Memory Model) FAQ:https://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html \ No newline at end of file diff --git a/docs/java/concurrent/threadlocal.md b/docs/java/concurrent/threadlocal.md index b3fd73f8..9015c3fe 100644 --- a/docs/java/concurrent/threadlocal.md +++ b/docs/java/concurrent/threadlocal.md @@ -1,5 +1,5 @@ --- -title: ThreadLocal 关键字详解 +title: ThreadLocal 详解 category: Java tag: - Java并发