{"version":1,"pages":[{"id":"-Ltduzpy6Shj21DkfROM","title":"前言","pathname":"/java-concurrent","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7oEXM0UZhLMEoI4","title":"Java多线程基础","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7oF71wjkrnJv7i7","title":"线程简介","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/11-xian-cheng-jian-jie","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"}]},{"id":"-Ltdv7oGAXYpRty4TqYh","title":"什么是线程","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/11-xian-cheng-jian-jie/shi-yao-shi-xian-cheng","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"线程简介"}]},{"id":"-Ltdv7oHy79F5j-VsE_u","title":"为什么要使用多线程/线程使用的好处","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/11-xian-cheng-jian-jie/wei-shi-yao-yao-shi-yong-duo-xian-cheng","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"线程简介"}]},{"id":"-Ltdv7oIPSKNQZoss27A","title":"线程的优先级","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/11-xian-cheng-jian-jie/xian-cheng-you-xian-ji","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"线程简介"}]},{"id":"-Ltdv7oJeHOx38deg5uJ","title":"线程的状态","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/11-xian-cheng-jian-jie/xian-cheng-zhuang-tai","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"线程简介"}]},{"id":"-Ltdv7oK_45ffa-WcadG","title":"Daemon线程","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/11-xian-cheng-jian-jie/daemonxian-cheng","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"线程简介"}]},{"id":"-Ltdv7oL6zNHWIWR4jfD","title":"启动和终止线程","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/qi-dong-he-zhong-zhi-xian-cheng","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"}]},{"id":"-Ltdv7oMcF23YT9EOE2v","title":"构造线程","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/qi-dong-he-zhong-zhi-xian-cheng/gou-zao-xian-cheng","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"启动和终止线程"}]},{"id":"-Ltdv7oNvjFvB-G07oEx","title":"启动线程","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/qi-dong-he-zhong-zhi-xian-cheng/qi-dong-xian-cheng","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"启动和终止线程"}]},{"id":"-Ltdv7oOgQPGrHZBuIzU","title":"中断线程","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/qi-dong-he-zhong-zhi-xian-cheng/zhong-duan-xian-cheng","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"启动和终止线程"}]},{"id":"-Ltdv7oPfbZ0JYZsXDwO","title":"过期的suspend()、resume()和stop()","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/qi-dong-he-zhong-zhi-xian-cheng/guo-qi-de-suspend-resume-he-stop","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"启动和终止线程"}]},{"id":"-Ltdv7oQV18GYQB7akiK","title":"安全地终止线程","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/qi-dong-he-zhong-zhi-xian-cheng/an-quan-di-zhong-zhi-xian-cheng","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"启动和终止线程"}]},{"id":"-Ltdv7oRfLzQw_aXEptH","title":"多线程实现方式","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/1duo-xian-cheng-shi-xian-fang-shi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"}]},{"id":"-Ltdv7oStmwig-5IsM6b","title":"多线程环境下，局部变量和全局变量都会共享吗？","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/duo-xian-cheng-huan-jing-xia-ff0c-ju-bu-bian-liang-he-quan-ju-bian-liang-du-hui-gong-xiang-ma-ff1f","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"}]},{"id":"-Ltdv7oTwDVXCJpMOlSa","title":"Java线程间的协助和通信","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/javaxian-cheng-zhi-jian-de-tong-xin","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"}]},{"id":"-Ltdv7oUdDaDiCfZ0cWP","title":"Thread.join的使用","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/javaxian-cheng-zhi-jian-de-tong-xin/threadjoinde-shi-yong","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"Java线程间的协助和通信"}]},{"id":"-Ltdv7oVbMDlbdpS5Ddn","title":"volatile、ThreadLocal、synchronized3个关键字区别","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/javaxian-cheng-zhi-jian-de-tong-xin/volatilethreadlocalsynchronized3ge-guan-jian-zi-qu-bie","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"Java线程间的协助和通信"}]},{"id":"-Ltdv7oWBrLFJeAmX5e1","title":"volatile关键字","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/javaxian-cheng-zhi-jian-de-tong-xin/volatile-guan-jian-zi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"Java线程间的协助和通信"}]},{"id":"-Ltdv7oXgl6q9lZDP5G4","title":"ThreadLocal关键字","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/javaxian-cheng-zhi-jian-de-tong-xin/threadlocalguan-jian-zi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"Java线程间的协助和通信"}]},{"id":"-Ltdv7oYDvynBVGe8uO5","title":"synchronized关键字","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/javaxian-cheng-zhi-jian-de-tong-xin/synchronized-guan-jian-zi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"Java线程间的协助和通信"}]},{"id":"-Ltdv7oZPU-fYJpr0IEH","title":"Java线程等待和通知的相关方法","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/javaxian-cheng-zhi-jian-de-tong-xin/javadeng-dai-he-tong-zhi-de-xiang-guan-fang-fa","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"Java线程间的协助和通信"}]},{"id":"-Ltdv7o_haqHi62hQ82N","title":"实战应用","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/shi-zhan-ying-yong","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"}]},{"id":"-Ltdv7oacivhq0noi1yS","title":"连接池","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/shi-zhan-ying-yong/lian-jie-chi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"实战应用"}]},{"id":"-Ltdv7obYX6SUZQEQwcT","title":"线程池","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/shi-zhan-ying-yong/xian-cheng-chi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"实战应用"}]},{"id":"-Ltdv7ocfP81sw0fF5tW","title":"如何计算合适的线程数","pathname":"/java-concurrent/di-yi-7ae0-java-duo-xian-cheng-ji-chu/shi-zhan-ying-yong/ru-he-ji-suan-he-shi-de-xian-cheng-shu","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程基础"},{"label":"实战应用"}]},{"id":"-Ltdv7od_JY_zswKvShm","title":"Java线程池与框架","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7oewQ5zzDlE4y0y","title":"Executor 框架","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/executor-kuang-jia-yu-xian-cheng-chi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7ofXNnPhX3Obdfz","title":"自定义线程池——ThreadPoolExecutor","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/zi-ding-yi-xian-cheng-chi-2014-2014-threadpoolexecutor","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7ogbsX2LGO3JG6I","title":"线程池工具类（单例模式）","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/xian-cheng-chi-gong-ju-lei","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7ohJ6PJHtjZ03Xu","title":"关闭线程池","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/guan-bi-xian-cheng-chi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7oioNw7yDUxO_UD","title":"合理地配置线程池","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/he-li-di-pei-zhi-xian-cheng-chi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7ojMih_9YQNdLhj","title":"线程池的监控","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/xian-cheng-chi-de-jian-kong","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7okLmvZzkgmn4OJ","title":"RejectedExecutionException产生的原因","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/rejectedexecutionexceptionchan-sheng-de-yuan-yin","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7ol92oPiH3pgEAD","title":"SpringBoot配置线程池工具类","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/springbootpei-zhi-xian-cheng-chi-gong-ju-lei","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7om7_Di-d0NaAtX","title":"FutureTask详解","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/futruetaskxiang-jie","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7onRYnjraSxuJ-G","title":"CompletionService讲解","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/completionservicejiang-jie","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7ooP6FAtSOnrnrL","title":"Future、FutureTask、CompletionService、CompletableFuture区别","pathname":"/java-concurrent/di-er-zhang-java-xian-cheng-chi-yu-kuang-jia/futurefuturetaskcompletionservicecompletablefuturequ-bie","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程池与框架"}]},{"id":"-Ltdv7opR1Py72KTl6T8","title":"Java内存模型","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7oq84PvLQi1HoG9","title":"Java 内存模型的基础","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/java-nei-cun-mo-xing-de-ji-chu","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"}]},{"id":"-Ltdv7orfxwYVA02xfHM","title":"并发编程模型的两个关键问题","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/java-nei-cun-mo-xing-de-ji-chu/bing-fa-bian-cheng-mo-xing-de-liang-ge-guan-jian-wen-ti","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"Java 内存模型的基础"}]},{"id":"-Ltdv7osG1_uR2lH-JRU","title":"Java内存模型的抽象结构","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/java-nei-cun-mo-xing-de-ji-chu/javanei-cun-mo-xing-de-chou-xiang-jie-gou","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"Java 内存模型的基础"}]},{"id":"-Ltdv7otJHH48NR6DF0Y","title":"从源代码到指令序列的重排序","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/java-nei-cun-mo-xing-de-ji-chu/cong-yuan-dai-ma-dao-zhi-ling-xu-lie-de-zhong-pai-xu","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"Java 内存模型的基础"}]},{"id":"-Ltdv7ouWUcVj_dqDr-S","title":"并发编程模型的分类","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/java-nei-cun-mo-xing-de-ji-chu/bing-fa-bian-cheng-mo-xing-de-fen-lei","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"Java 内存模型的基础"}]},{"id":"-Ltdv7ovplZwHkDSWlpW","title":"重排序","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/zhong-pai-xu","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"}]},{"id":"-Ltdv7ow0HgASPTzCi2_","title":"数据依赖性","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/zhong-pai-xu/shu-ju-yi-lai-xing","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"重排序"}]},{"id":"-Ltdv7ox2638z8ZTY9Yy","title":"as-if-serial语义","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/zhong-pai-xu/as-if-serialyu-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"重排序"}]},{"id":"-Ltdv7oyDEUkT4QC9nz_","title":"程序顺序规则","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/zhong-pai-xu/cheng-xu-shun-xu-gui-ze","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"重排序"}]},{"id":"-Ltdv7ozkZ3rcWqYG2d1","title":"重排序对多线程的影响","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/zhong-pai-xu/zhong-pai-xu-dui-duo-xian-cheng-de-ying-xiang","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"重排序"}]},{"id":"-Ltdv7p-NhUJQj-pHLPc","title":"顺序一致性","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shun-xu-yi-zhi-xing","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"}]},{"id":"-Ltdv7p0XXmHLEtuwAUX","title":"数据竞争与顺序一致性","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shun-xu-yi-zhi-xing/shu-ju-jing-zheng-yu-shun-xu-yi-zhi-xing","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"顺序一致性"}]},{"id":"-Ltdv7p1hcrnupSXfhhx","title":"顺序一致性内存模型","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shun-xu-yi-zhi-xing/shun-xu-yi-zhi-xing-nei-cun-mo-xing","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"顺序一致性"}]},{"id":"-Ltdv7p2i2jneTzluNBN","title":"同步程序的顺序一致性效果","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shun-xu-yi-zhi-xing/tong-bu-cheng-xu-de-shun-xu-yi-zhi-xing-xiao-guo","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"顺序一致性"}]},{"id":"-Ltdv7p3xk1HoV-Zyd3t","title":"未同步程序的执行特性","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shun-xu-yi-zhi-xing/wei-tong-bu-cheng-xu-de-zhi-xing-te-xing","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"顺序一致性"}]},{"id":"-Ltdv7p41gh91UL7vpa_","title":"volatile内存语义","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/volatilenei-cun-yu-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"}]},{"id":"-Ltdv7p5Qhp3tSXayACJ","title":"volatile的特性","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/volatilenei-cun-yu-yi/volatilede-te-xing","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"volatile内存语义"}]},{"id":"-Ltdv7p6lvaMglQeQUjp","title":"volatile写-读建立的happens-before关系","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/volatilenei-cun-yu-yi/volatile5199-du-jian-li-de-happens-before-guan-xi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"volatile内存语义"}]},{"id":"-Ltdv7p7LBEjGTMDqlzG","title":"volatile写-读的内存语义","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/volatilenei-cun-yu-yi/volatile5199-du-de-nei-cun-yu-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"volatile内存语义"}]},{"id":"-Ltdv7p8cSHM7XBLFzOS","title":"volatile内存语义的实现","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/volatilenei-cun-yu-yi/volatilenei-cun-yu-yi-de-shi-xian","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"volatile内存语义"}]},{"id":"-Ltdv7p9uLNPjoOOvTCd","title":"JSR-133为什么要增强volatile的内存语义","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/volatilenei-cun-yu-yi/jsr-133wei-shi-yao-yao-zeng-qiang-volatile-de-nei-cun-yu-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"volatile内存语义"}]},{"id":"-Ltdv7pAYdOIjeTEqjSz","title":"锁内存定义","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/suo-nei-cun-ding-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"}]},{"id":"-Ltdv7pBV-NEl_XbYFjB","title":"锁的释放-获取建立的happens-before关系","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/suo-nei-cun-ding-yi/suo-de-shi-653e-huo-qu-jian-li-de-happens-before-guan-xi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"锁内存定义"}]},{"id":"-Ltdv7pCPlcBwbA8mRGT","title":"锁的释放和获取的内存语义","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/suo-nei-cun-ding-yi/suo-de-shi-fang-he-huo-qu-de-nei-cun-yu-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"锁内存定义"}]},{"id":"-Ltdv7pDM-tp6GL-7CQS","title":"锁内存语义的实现","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/suo-nei-cun-ding-yi/suo-nei-cun-yu-yi-de-shi-xian","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"锁内存定义"}]},{"id":"-Ltdv7pErKWDb12_PuPF","title":"concurrent包的实现","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/suo-nei-cun-ding-yi/concurrentbao-de-shi-xian","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"锁内存定义"}]},{"id":"-Ltdv7pF0GmH1JtC6v8B","title":"final域内存语义","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/finalyu-nei-cun-yu-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"}]},{"id":"-Ltdv7pG5yRnpjUTje3W","title":"final域的重排序规则","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/finalyu-nei-cun-yu-yi/finalyu-de-zhong-pai-xu-gui-ze","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"final域内存语义"}]},{"id":"-Ltdv7pHZGWcAQ0ndIQw","title":"写final域的重排序规则","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/finalyu-nei-cun-yu-yi/xie-final-yu-de-zhong-pai-xu-gui-ze","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"final域内存语义"}]},{"id":"-Ltdv7pIF6LALUAKHaQD","title":"读final域的重排序规则","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/finalyu-nei-cun-yu-yi/du-final-yu-de-zhong-pai-xu-gui-ze","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"final域内存语义"}]},{"id":"-Ltdv7pJmAV64hqMXTcF","title":"final域为引用类型","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/finalyu-nei-cun-yu-yi/finalyu-wei-yin-yong-lei-xing","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"final域内存语义"}]},{"id":"-Ltdv7pKcsRJMPkmiEc4","title":"为什么final引用不能从构造函数内“溢出”","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/finalyu-nei-cun-yu-yi/wei-shi-yao-final-yin-yong-bu-neng-cong-gou-zao-han-shu-nei-201c-yi-chu-201d","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"final域内存语义"}]},{"id":"-Ltdv7pLrrOyNLHzoH_A","title":"final语义在处理器中的实现","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/finalyu-nei-cun-yu-yi/finalyu-yi-zai-chu-li-qi-zhong-de-shi-xian","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"final域内存语义"}]},{"id":"-Ltdv7pML5D4LrJ49QYa","title":"JSR-133为什么要增强final的语义","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/finalyu-nei-cun-yu-yi/jsr-133wei-shi-yao-yao-zeng-qiang-final-de-yu-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"final域内存语义"}]},{"id":"-Ltdv7pNSiGDzQ24PsT0","title":"happens-before","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/happens-beforejian-jie","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"}]},{"id":"-Ltdv7pOrBzVoyZqmsC8","title":"双重检查锁定与延迟初始化","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shuang-zhong-jian-cha-suo-ding-yu-yan-chi-chu-shi-hua","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"}]},{"id":"-Ltdv7pP7r6CkIYseVjO","title":"双重检查锁定的由来","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shuang-zhong-jian-cha-suo-ding-yu-yan-chi-chu-shi-hua/shuang-zhong-jian-cha-suo-ding-de-you-lai","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"双重检查锁定与延迟初始化"}]},{"id":"-Ltdv7pQucG1AqFxww1-","title":"问题的根源","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shuang-zhong-jian-cha-suo-ding-yu-yan-chi-chu-shi-hua/wen-ti-de-gen-yuan","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"双重检查锁定与延迟初始化"}]},{"id":"-Ltdv7pRgPTu3bBOxkr0","title":"基于volatile的解决方案","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shuang-zhong-jian-cha-suo-ding-yu-yan-chi-chu-shi-hua/ji-yu-volatile-de-jie-jue-fang-an","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"双重检查锁定与延迟初始化"}]},{"id":"-Ltdv7pSA8ICWmnhr4d5","title":"基于类初始化的解决方案","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/shuang-zhong-jian-cha-suo-ding-yu-yan-chi-chu-shi-hua/ji-yu-lei-chu-shi-hua-de-jie-jue-fang-an","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"双重检查锁定与延迟初始化"}]},{"id":"-Ltdv7pTa1SyKRYu80SR","title":"Java内存模型综述","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/javanei-cun-mo-xing-zong-shu","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"}]},{"id":"-Ltdv7pUVXS3ERZf6en5","title":"处理器的内存模型","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/javanei-cun-mo-xing-zong-shu/chu-li-qi-de-nei-cun-mo-xing","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"Java内存模型综述"}]},{"id":"-Ltdv7pVQ3G4nH7pyOhu","title":"各种内存模型之间的关系","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/javanei-cun-mo-xing-zong-shu/ge-zhong-nei-cun-mo-xing-zhi-jian-de-guan-xi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"Java内存模型综述"}]},{"id":"-Ltdv7pWPYPq82zbz_L-","title":"JMM的内存可见性保证","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/javanei-cun-mo-xing-zong-shu/jmmde-nei-cun-ke-jian-xing-bao-zheng","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"Java内存模型综述"}]},{"id":"-Ltdv7pXQQMvd1NKvbAo","title":"JSR-133对旧内存模型的修补","pathname":"/java-concurrent/di-san-zhang-java-nei-cun-mo-xing/javanei-cun-mo-xing-zong-shu/jsr-133dui-jiu-nei-cun-mo-xing-de-xiu-bu","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java内存模型"},{"label":"Java内存模型综述"}]},{"id":"-Ltdv7pYZwqaJwhbzaA2","title":"HashMap实现原理","pathname":"/java-concurrent/hashmapshi-xian-yuan-li","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7pZM-DApNaNodjk","title":"讲解(一)","pathname":"/java-concurrent/hashmapshi-xian-yuan-li/yuan-li-ff08-yi-ff09","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"HashMap实现原理"}]},{"id":"-Ltdv7p_Khc6LX0bCRQo","title":"讲解(二)","pathname":"/java-concurrent/hashmapshi-xian-yuan-li/jiang-89e328-4e8c29","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"HashMap实现原理"}]},{"id":"-Ltdv7paSW5jmSA6Lk05","title":"HashMap原理(面试篇)","pathname":"/java-concurrent/hashmapshi-xian-yuan-li/hashmapde-gong-zuo-yuan-740628-mian-shi-7bc729","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"HashMap实现原理"}]},{"id":"-M34CHhpHCQS6yO34KMc","title":"HashMap原理（面试篇二）","pathname":"/java-concurrent/hashmapshi-xian-yuan-li/hashmap-yuan-li-mian-shi-pian-er","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"HashMap实现原理"}]},{"id":"-Ltdv7pb666nkcRM_0eK","title":"ConcurrentHashMap的实现原理与使用","pathname":"/java-concurrent/concurrenthashmapde-shi-xian-yuan-li-yu-shi-yong","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7pc0b-pemyVtafr","title":"为什么要使用ConcurrentHashMap","pathname":"/java-concurrent/concurrenthashmapde-shi-xian-yuan-li-yu-shi-yong/wei-shi-yao-yao-shi-yong-concurrenthashmap","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"ConcurrentHashMap的实现原理与使用"}]},{"id":"-Ltdv7pd45cktq_TnoC9","title":"ConcurrentHashMap的结构","pathname":"/java-concurrent/concurrenthashmapde-shi-xian-yuan-li-yu-shi-yong/concurrenthashmapde-jie-gou","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"ConcurrentHashMap的实现原理与使用"}]},{"id":"-Ltdv7peVnhSrcHJoMHO","title":"ConcurrentHashMap的初始化","pathname":"/java-concurrent/concurrenthashmapde-shi-xian-yuan-li-yu-shi-yong/concurrenthashmapde-chu-shi-hua","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"ConcurrentHashMap的实现原理与使用"}]},{"id":"-Ltdv7pflemKocYN-5Jb","title":"定位Segment","pathname":"/java-concurrent/concurrenthashmapde-shi-xian-yuan-li-yu-shi-yong/ding-wei-segment","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"ConcurrentHashMap的实现原理与使用"}]},{"id":"-Ltdv7pgzX8RS9zMYb3A","title":"ConcurrentHashMap的操作","pathname":"/java-concurrent/concurrenthashmapde-shi-xian-yuan-li-yu-shi-yong/concurrenthashmapde-cao-zuo","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"ConcurrentHashMap的实现原理与使用"}]},{"id":"-Ltdv7phrC3WfHgFj2MK","title":"ConcurrentHashMap讲解(一)","pathname":"/java-concurrent/concurrenthashmapde-shi-xian-yuan-li-yu-shi-yong/concurrenthashmapjiang-89e328-4e0029","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"ConcurrentHashMap的实现原理与使用"}]},{"id":"-Ltdv7pi1X7sdo7dDIrl","title":"Java中的阻塞队列","pathname":"/java-concurrent/javazhong-de-zu-sai-dui-lie","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7pjt4OSTDSigXvc","title":"什么是阻塞队列","pathname":"/java-concurrent/javazhong-de-zu-sai-dui-lie/shi-yao-shi-zu-sai-dui-lie","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java中的阻塞队列"}]},{"id":"-Ltdv7pk_-HJCmmjlf1v","title":"Java里的阻塞队列","pathname":"/java-concurrent/javazhong-de-zu-sai-dui-lie/javali-de-zu-sai-dui-lie","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java中的阻塞队列"}]},{"id":"-Ltdv7pljh8OIT_Bhxfw","title":"阻塞队列的实现原理","pathname":"/java-concurrent/javazhong-de-zu-sai-dui-lie/zu-sai-dui-lie-de-shi-xian-yuan-li","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java中的阻塞队列"}]},{"id":"-Ltdv7pmyfdp_6f_Lukv","title":"Fork/Join框架","pathname":"/java-concurrent/forkjoinkuang-jia","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7pnxbMFzzCK8Fet","title":"什么是Fork/Join框架","pathname":"/java-concurrent/forkjoinkuang-jia/shi-yao-shifork-join-kuang-jia","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Fork/Join框架"}]},{"id":"-Ltdv7poqUEPFrJhXGfk","title":"工作窃取算法","pathname":"/java-concurrent/forkjoinkuang-jia/gong-zuo-qie-qu-suan-fa","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Fork/Join框架"}]},{"id":"-Ltdv7pp1akxm5FD-lFN","title":"Fork/Join框架的设计","pathname":"/java-concurrent/forkjoinkuang-jia/forkjoinkuang-jia-de-she-ji","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Fork/Join框架"}]},{"id":"-Ltdv7pq31W5oOFGOpiz","title":"使用Fork/Join框架","pathname":"/java-concurrent/forkjoinkuang-jia/shi-yong-fork-join-kuang-jia","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Fork/Join框架"}]},{"id":"-Ltdv7prosNfdCLY4AKx","title":"Fork/Join框架的异常处理","pathname":"/java-concurrent/forkjoinkuang-jia/forkjoinkuang-jia-de-yi-chang-chu-li","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Fork/Join框架"}]},{"id":"-Ltdv7psYm7cB6YfaduC","title":"Fork/Join框架的实现原理","pathname":"/java-concurrent/forkjoinkuang-jia/forkjoinkuang-jia-de-shi-xian-yuan-li","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Fork/Join框架"}]},{"id":"-Ltdv7ptxgsFR2FyeEOU","title":"ForkJoinPool的commonPool相关参数配置","pathname":"/java-concurrent/forkjoinkuang-jia/forkjoinpoolde-commonpool-xiang-guan-can-shu-pei-zhi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Fork/Join框架"}]},{"id":"-Ltdv7pujoEOeS5mcGd-","title":"java.util.concurrent包讲解","pathname":"/java-concurrent/javautilconcurrentbao-jiang-jie","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7pv2awoFJH14224","title":"线程安全AtomicInteger的讲解","pathname":"/java-concurrent/javautilconcurrentbao-jiang-jie/xian-cheng-an-quan-atomicinteger-de-jiang-jie","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"java.util.concurrent包讲解"}]},{"id":"-Ltdv7pwz046UMMY1Grx","title":"CompletableFuture讲解","pathname":"/java-concurrent/javautilconcurrentbao-jiang-jie/java8xin-te-xing-zhi-completablefuture","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"java.util.concurrent包讲解"}]},{"id":"-Ltdv7pxW3dFpsM_lPM7","title":"CompletableFuture接口详解","pathname":"/java-concurrent/javautilconcurrentbao-jiang-jie/java8xin-te-xing-zhi-completablefuture/completablefuture4e0029","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"java.util.concurrent包讲解"},{"label":"CompletableFuture讲解"}]},{"id":"-Ltdv7pyLWuIrxsHiXyN","title":"CompletableFuture与parallelStream()性能差异","pathname":"/java-concurrent/javautilconcurrentbao-jiang-jie/java8xin-te-xing-zhi-completablefuture/completablefutureyu-parallelstream-xing-neng-cha-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"java.util.concurrent包讲解"},{"label":"CompletableFuture讲解"}]},{"id":"-Ltdv7pzOBHFwkEtLXhW","title":"CompletableFuture接口详解2","pathname":"/java-concurrent/javautilconcurrentbao-jiang-jie/java8xin-te-xing-zhi-completablefuture/completablefuturejie-kou-xiang-jie-2","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"java.util.concurrent包讲解"},{"label":"CompletableFuture讲解"}]},{"id":"-Ltdv7q-glWG0_T0zaM1","title":"Java线程安全","pathname":"/java-concurrent/javaxian-cheng-an-quan","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7q0Wgy0_sZmwKfH","title":"性能与可伸缩性","pathname":"/java-concurrent/javaxian-cheng-an-quan/xing-neng-yu-ke-shen-suo-xing","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程安全"}]},{"id":"-Ltdv7q17Rg1f1XVI9f-","title":"解决死锁","pathname":"/java-concurrent/javaxian-cheng-an-quan/jie-jue-si-suo","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程安全"}]},{"id":"-Ltdv7q2Ldn87PZ6_QEF","title":"死锁定义","pathname":"/java-concurrent/javaxian-cheng-an-quan/si-suo-ding-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程安全"}]},{"id":"-Ltdv7q3y4ELUfgiX_os","title":"如何让多线程下的类安全","pathname":"/java-concurrent/javaxian-cheng-an-quan/ru-he-rang-duo-xian-cheng-xia-de-lei-an-quan","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程安全"}]},{"id":"-Ltdv7q4uAcshR-ylZtX","title":"类的线程安全性定义","pathname":"/java-concurrent/javaxian-cheng-an-quan/lei-de-xian-cheng-an-quan-xing-ding-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程安全"}]},{"id":"-Ltdv7q5gU6wW0P5QUK9","title":"实战：实现一个线程安全的单例模式","pathname":"/java-concurrent/javaxian-cheng-an-quan/shi-zhan-ff1a-shi-xian-yi-ge-xian-cheng-an-quan-de-dan-li-mo-shi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java线程安全"}]},{"id":"-Ltdv7q6R8PwTeucktbW","title":"Java常用并发开发工具和类的源码分析","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7q7HudVzngZ7Y8m","title":"CountDownLatch","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/countdownlatch","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"}]},{"id":"-Ltdv7q8K4f-Fy-JNkqh","title":"CyclicBarrier","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/cyclicbarrier","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"}]},{"id":"-Ltdv7q9jwpLkXk1bgN1","title":"Semaphore","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/semaphore","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"}]},{"id":"-Ltdv7qA7CGtnJsgDhCu","title":"Exchange","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/exchange","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"}]},{"id":"-Ltdv7qBonvsn6yHq08t","title":"ConcurrentHashMap","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/concurrenthashmap","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"}]},{"id":"-Ltdv7qClhnzyK9_n0Sx","title":"ConcurrentSkipListMap","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/concurrentskiplistmap","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"}]},{"id":"-Ltdv7qD9gs-EtfEO3FR","title":"HashMap","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/hashmap","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"}]},{"id":"-Ltdv7qED4MaLR4ceiB2","title":"HashMap源码实现及分析","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/hashmap/hashmapyuan-ma-shi-xian-ji-fen-xi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"},{"label":"HashMap"}]},{"id":"-Ltdv7qF2cwpwNJ9U27X","title":"HashMap的一些面试题","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/hashmap/hashmapde-yi-xie-mian-shi-ti","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"},{"label":"HashMap"}]},{"id":"-Ltdv7qGiMwNYhjWOhmf","title":"List","pathname":"/java-concurrent/javachang-yong-bing-fa-kai-fa-gong-ju-he-lei-de-yuan-ma-fen-xi/list","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java常用并发开发工具和类的源码分析"}]},{"id":"-Ltdv7qH78dRV4kySWbl","title":"Java中的锁","pathname":"/java-concurrent/javazhong-de-suo","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7qI_eGPF1uSwqBz","title":"基础知识","pathname":"/java-concurrent/javazhong-de-suo/ji-chu-zhi-shi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java中的锁"}]},{"id":"-Ltdv7qJ1TboGRR-4zJt","title":"番外篇","pathname":"/java-concurrent/javazhong-de-suo/fan-wai-pian","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java中的锁"}]},{"id":"-Ltdv7qKITONhf2w0ts3","title":"synchronized 是可重入锁吗？为什么？","pathname":"/java-concurrent/javazhong-de-suo/synchronized-shi-ke-zhong-ru-suo-ma-ff1f-wei-shi-yao-ff1f","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java中的锁"}]},{"id":"-Ltdv7qLnIBbLvLd87Tb","title":"自旋锁","pathname":"/java-concurrent/javazhong-de-suo/zi-xuan-suo","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java中的锁"}]},{"id":"-Ltdv7qMzTZL62wr8GR-","title":"Java多线程的常见问题","pathname":"/java-concurrent/javaduo-xian-cheng-de-chang-jian-wen-ti","siteSpaceId":"sitesp_w0pMo","description":""},{"id":"-Ltdv7qNkkG00hwTzyBZ","title":"常见问题一","pathname":"/java-concurrent/javaduo-xian-cheng-de-chang-jian-wen-ti/chang-jian-wen-ti-yi","siteSpaceId":"sitesp_w0pMo","description":"","breadcrumbs":[{"label":"Java多线程的常见问题"}]}]}