[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"primary-menu":6,"cat-java-concurrent":85,"catposts-java-concurrent":99,"post-detail-post-jc-synchronized-vs-reentrantlock-135c349a":208},{"config":4,"socialLinks":5},null,[],{"metadata":7,"spec":10,"menuItems":20},{"name":8,"creationTimestamp":9},"primary","2026-09-12T06:13:55.024154Z",{"displayName":11,"menuItems":12},"主菜单",[13,14,15,16,17,18,19],"88c3f10b-321c-4092-86a8-70db00251b74","menu-item-izrtmxer","c4c814d1-0c2c-456b-8c96-4864965fee94","menu-item-column","menu-item-tools","menu-item-zsxq","menu-item-ocrxlczu",[21,30,40,49,58,67,76],{"displayName":22,"metadata":23,"spec":25,"status":28,"children":29},"首页",{"name":13,"creationTimestamp":24},"2026-09-12T06:13:54.422830Z",{"displayName":22,"href":26,"priority":27,"menuName":8},"\u002F",0,{"displayName":22,"href":26},[],{"displayName":31,"metadata":32,"spec":34,"status":38,"children":39},"Java面试八股",{"name":14,"creationTimestamp":33},"2026-09-13T09:42:02.854891Z",{"displayName":31,"href":35,"target":36,"priority":37,"menuName":8},"\u002Fjava-interview","_self",1,{"displayName":31,"href":35},[],{"displayName":41,"metadata":42,"spec":44,"status":47,"children":48},"文章",{"name":15,"creationTimestamp":43},"2026-09-12T06:13:54.457307Z",{"displayName":41,"href":45,"priority":46,"menuName":8},"\u002Farchives",2,{"displayName":41,"href":45},[],{"displayName":50,"metadata":51,"spec":53,"status":56,"children":57},"项目实战",{"name":16,"creationTimestamp":52},"2026-09-14T00:35:08.138170Z",{"displayName":50,"href":54,"target":36,"priority":55,"menuName":8},"\u002Fcolumn",3,{"displayName":50,"href":54},[],{"displayName":59,"metadata":60,"spec":62,"status":65,"children":66},"在线工具",{"name":17,"creationTimestamp":61},"2026-09-14T00:35:08.171474Z",{"displayName":59,"href":63,"target":36,"priority":64,"menuName":8},"\u002Ftools",4,{"displayName":59,"href":63},[],{"displayName":68,"metadata":69,"spec":71,"status":74,"children":75},"知识星球",{"name":18,"creationTimestamp":70},"2026-09-14T00:35:08.199145Z",{"displayName":68,"href":72,"target":36,"priority":73,"menuName":8},"\u002Fzsxq",5,{"displayName":68,"href":72},[],{"displayName":77,"metadata":78,"spec":80,"status":83,"children":84},"特价云服务器",{"name":19,"creationTimestamp":79},"2026-09-25T15:30:59.201614Z",{"displayName":77,"href":81,"target":36,"priority":82,"menuName":8},"\u002Fserver",6,{"displayName":77,"href":81},[],{"metadata":86,"spec":91,"status":97,"postCount":73},{"name":87,"creationTimestamp":88,"labels":89},"java-concurrent","2026-09-13T09:13:25.680850Z",{"haloweb.section":90},"interview",{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},"Java 并发面试题","","Java 并发编程面试题：JMM、synchronized 与锁、线程池、AQS 与并发容器。",7,false,{"permalink":98,"postCount":73,"visiblePostCount":73},"\u002Fcategories\u002Fjava-concurrent",[100,124,145,166,187],{"metadata":101,"spec":104,"status":113,"categories":118},{"name":102,"creationTimestamp":103},"post-jc-countdownlatch-cyclicbarrier-e9df49ff","2026-09-13T10:00:59.739697Z",{"title":105,"slug":106,"cover":93,"excerpt":107,"publishTime":109,"categories":110,"tags":111,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"CountDownLatch 和 CyclicBarrier 的区别？","jc-countdownlatch-cyclicbarrier",{"raw":93,"autoGenerate":108},true,"2026-09-13T10:00:59.785610Z",[87],[],"PUBLIC",{"permalink":114,"excerpt":115,"lastModifyTime":116,"phase":117},"\u002Farchives\u002Fjc-countdownlatch-cyclicbarrier","一、CountDownLatch 一个或多个线程等待其他线程完成后再继续。 用计数器实现，countDown() 减 1，await() 等待归零。 一次性，归零后不能重置。 场景：主线程等待多个子任务完成。 二、CyclicBarrier 一组线程互相等待，全部到达屏障点后一起继续。 可循环使用，","2026-09-16T09:13:46.649457Z","PUBLISHED",[119],{"metadata":120,"spec":122,"status":123,"postCount":73},{"name":87,"creationTimestamp":88,"labels":121},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":125,"spec":128,"status":135,"categories":139},{"name":126,"creationTimestamp":127},"post-jc-volatile-b6390e4d","2026-09-13T10:00:59.557235Z",{"title":129,"slug":130,"cover":93,"excerpt":131,"publishTime":132,"categories":133,"tags":134,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"volatile 关键字的作用？","jc-volatile",{"raw":93,"autoGenerate":108},"2026-09-13T10:00:59.633464Z",[87],[],{"permalink":136,"excerpt":137,"lastModifyTime":138,"phase":117},"\u002Farchives\u002Fjc-volatile","一、两大作用 可见性：被 volatile 修饰的变量，一个线程修改后其他线程立即可见。实现：写入时立即刷新主内存，读取时从主内存重新加载。 禁止指令重排：在读写操作前后插入内存屏障。 二、不保证原子性 volatile int count = 0;\ncount++;   \u002F\u002F 不是原子操作，多线程","2026-09-16T09:13:45.577642Z",[140],{"metadata":141,"spec":143,"status":144,"postCount":73},{"name":87,"creationTimestamp":88,"labels":142},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":146,"spec":149,"status":156,"categories":160},{"name":147,"creationTimestamp":148},"post-jc-aqs-principle-2a5a9213","2026-09-13T10:00:59.136776Z",{"title":150,"slug":151,"cover":93,"excerpt":152,"publishTime":153,"categories":154,"tags":155,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"AQS 的原理是什么？","jc-aqs-principle",{"raw":93,"autoGenerate":108},"2026-09-13T10:00:59.366386Z",[87],[],{"permalink":157,"excerpt":158,"lastModifyTime":159,"phase":117},"\u002Farchives\u002Fjc-aqs-principle","一、定义 AQS（AbstractQueuedSynchronizer）是 JUC 锁的基础框架，用一个 int 状态变量（state）和一个 FIFO 等待队列实现同步。 二、核心 state：同步状态，0 表示空闲，>0 表示被占用。 CLH 队列：未获取锁的线程封装成 Node 入队，自旋 +","2026-09-16T09:14:31.781664Z",[161],{"metadata":162,"spec":164,"status":165,"postCount":73},{"name":87,"creationTimestamp":88,"labels":163},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":167,"spec":170,"status":177,"categories":181},{"name":168,"creationTimestamp":169},"post-jc-thread-pool-9d19f73f","2026-09-13T10:00:58.904245Z",{"title":171,"slug":172,"cover":93,"excerpt":173,"publishTime":174,"categories":175,"tags":176,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"线程池的核心参数与工作流程？","jc-thread-pool",{"raw":93,"autoGenerate":108},"2026-09-13T10:00:58.966174Z",[87],[],{"permalink":178,"excerpt":179,"lastModifyTime":180,"phase":117},"\u002Farchives\u002Fjc-thread-pool","一、七大核心参数 corePoolSize：核心线程数，即使空闲也保留。 maximumPoolSize：最大线程数。 keepAliveTime：非核心线程空闲存活时间。 unit：时间单位。 workQueue：阻塞队列。 threadFactory：线程工厂。 handler：拒绝策略。 二、","2026-09-16T09:13:44.180134Z",[182],{"metadata":183,"spec":185,"status":186,"postCount":73},{"name":87,"creationTimestamp":88,"labels":184},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":188,"spec":191,"status":198,"categories":202},{"name":189,"creationTimestamp":190},"post-jc-synchronized-vs-reentrantlock-135c349a","2026-09-13T10:00:58.693292Z",{"title":192,"slug":193,"cover":93,"excerpt":194,"publishTime":195,"categories":196,"tags":197,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"synchronized 和 ReentrantLock 的区别？","jc-synchronized-vs-reentrantlock",{"raw":93,"autoGenerate":108},"2026-09-13T10:00:58.757444Z",[87],[],{"permalink":199,"excerpt":200,"lastModifyTime":201,"phase":117},"\u002Farchives\u002Fjc-synchronized-vs-reentrantlock","一、底层实现 synchronized：JVM 级，字节码指令 monitorenter\u002Fmonitorexit，依赖对象头的 Mark Word。 ReentrantLock：JDK 级，基于 AQS（AbstractQueuedSynchronizer）实现。 二、对比 维度 synchroni","2026-09-16T09:14:31.338006Z",[203],{"metadata":204,"spec":206,"status":207,"postCount":73},{"name":87,"creationTimestamp":88,"labels":205},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":209,"spec":210,"status":214,"categories":215,"content":221},{"name":189,"creationTimestamp":190},{"title":192,"slug":193,"cover":93,"excerpt":211,"publishTime":195,"categories":212,"tags":213,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},{"raw":93,"autoGenerate":108},[87],[],{"permalink":199,"excerpt":200,"lastModifyTime":201,"phase":117},[216],{"metadata":217,"spec":219,"status":220,"postCount":73},{"name":87,"creationTimestamp":88,"labels":218},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"content":222,"raw":222},"\u003Ch2>一、底层实现\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>synchronized\u003C\u002Fstrong>：JVM 级，字节码指令 monitorenter\u002Fmonitorexit，依赖对象头的 Mark Word。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>ReentrantLock\u003C\u002Fstrong>：JDK 级，基于 AQS（AbstractQueuedSynchronizer）实现。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>二、对比\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>维度\u003C\u002Fth>\n\u003Cth>synchronized\u003C\u002Fth>\n\u003Cth>ReentrantLock\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>实现\u003C\u002Ftd>\n\u003Ctd>JVM\u003C\u002Ftd>\n\u003Ctd>JDK\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>释放\u003C\u002Ftd>\n\u003Ctd>自动\u003C\u002Ftd>\n\u003Ctd>需手动 unlock（finally）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>公平锁\u003C\u002Ftd>\n\u003Ctd>非公平\u003C\u002Ftd>\n\u003Ctd>可配置公平\u002F非公平\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>可中断\u003C\u002Ftd>\n\u003Ctd>不可\u003C\u002Ftd>\n\u003Ctd>lockInterruptibly\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>超时\u003C\u002Ftd>\n\u003Ctd>不支持\u003C\u002Ftd>\n\u003Ctd>tryLock(timeout)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>条件变量\u003C\u002Ftd>\n\u003Ctd>一个\u003C\u002Ftd>\n\u003Ctd>多个 Condition\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>三、锁升级（synchronized）\u003C\u002Fh2>\n\u003Cp>无锁 → 偏向锁 → 轻量级锁 → 重量级锁，只能升级不能降级。\u003C\u002Fp>\n\u003Ch2>四、使用建议\u003C\u002Fh2>\n\u003Cp>简单同步用 synchronized（不易忘记解锁）；需要公平、可中断、超时、多条件时用 ReentrantLock。\u003C\u002Fp>"]