{"id":1464,"date":"2025-12-21T21:00:50","date_gmt":"2025-12-21T13:00:50","guid":{"rendered":"https:\/\/eve2333.top\/?p=1464"},"modified":"2025-12-21T21:00:51","modified_gmt":"2025-12-21T13:00:51","slug":"%e5%8a%a8%e6%80%81%e7%ba%bf%e7%a8%8b%e6%b1%a0onethread%e7%b3%bb%e7%bb%9f-%e7%ac%ac%e4%b8%89%e9%83%a8%e5%88%86-%e4%bb%8e%e9%9b%b6%e5%88%b0%e4%b8%80%e5%bc%80%e5%8f%91","status":"publish","type":"post","link":"https:\/\/eve2333.top\/?p=1464","title":{"rendered":"\u52a8\u6001\u7ebf\u7a0b\u6c60oneThread\u7cfb\u7edf &#8212; \u7b2c\u4e09\u90e8\u5206 \u4ece\u96f6\u5230\u4e00\u5f00\u53d1"},"content":{"rendered":"\n<p>JDK \u7ebf\u7a0b\u6c60\u7684\u95ee\u9898\u75db\u70b9\u96be\u9898\u662f\u53ea\u8981\u4f60\u7528\u7ebf\u7a0b\u6c60\uff0c\u5c31\u52bf\u5fc5\u4f1a\u9047\u5230\u8fd9\u51e0\u9053\u95ee\u9898<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u75db\u70b9<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u672c\u8d28\u5f52\u56e0<\/th><th class=\"has-text-align-left\" data-align=\"left\">oneThread \u8bbe\u8ba1\u6307\u9488<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u7ebf\u7a0b\u6c60\u968f\u610f new\uff0c\u8d44\u6e90\u5931\u63a7<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7f3a\u4e4f\u7edf\u4e00\u6ce8\u518c\u8868<\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u7ebf\u7a0b\u6c60\u6ce8\u518c\u4e2d\u5fc3<\/strong> + \u7edf\u4e00\u7ba1\u63a7<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u53c2\u6570\u96be\u4f30\u7b97\u3001\u53ea\u80fd\u91cd\u53d1<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9759\u6001\u914d\u7f6e &amp; \u65e0\u76d1\u63a7<\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u8fd0\u884c\u4e2d\u70ed\u5237\u65b0<\/strong> + <strong>\u5b9e\u65f6\u6307\u6807\u91c7\u96c6<\/strong><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u961f\u5217\u5835\u585e \/ \u62d2\u7edd\u7b56\u7565\u201c\u9ed1\u76d2\u201d<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\u544a\u8b66 &amp; \u65e0\u8ffd\u8e2a<\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u4e09\u91cd\u544a\u8b66\u89e6\u53d1\u5668<\/strong> \uff08\u6d3b\u8dc3\u5ea6 \/ \u961f\u5217 \/ \u62d2\u7edd\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u4e0b\u7ebf\u65f6\u4efb\u52a1\u4e22\u5931<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7ebf\u7a0b\u6c60\u751f\u547d\u5468\u671f\u7f3a\u53e3<\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u4f18\u96c5\u5173\u95ed Hook<\/strong> (<code>awaitTerminationMillis<\/code>)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>JDK \u7684\u7ebf\u7a0b\u6c60\u662f\u4e00\u4e2a\u57fa\u7840\u7ec4<strong>\uff0c\u800c\u751f\u4ea7\u73af\u5883\u9700\u8981\u7684\u662f\u4e00\u4e2a<\/strong>\u201c\u6cbb\u7406\u5e73\u53f0\u201d\uff1b\u4e5f\u5c31\u662f\u8bf4\u8981\u4e48\u4f60\u5728\u9879\u76ee\u4e2d\u6ce8\u610f\u5230\u7ebf\u7a0b\u6c60\u7684\u7f3a\u70b9\u5e76\u5728\u81ea\u5df1\u7a0b\u5e8f\u4e2d\u6ce8\u610f\u5230\u5408\u7406\u4f7f\u7528\uff0c\u8981\u4e48\u5c31\u6362\u6210\u52a8\u6001\u7ebf\u7a0b\u6c60<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u75db\u70b9\u4e00\uff1a\u7ebf\u7a0b\u6c60\u968f\u610f new\uff0c\u8d44\u6e90\u5931\u63a7<\/h3>\n\n\n\n<p>\u7ebf\u7a0b\u6c60\u968f\u610f new\uff0c\u8d44\u6e90\u5931\u63a7 -> \u7f3a\u4e4f\u7edf\u4e00\u6ce8\u518c\u8868 -> \u7ebf\u7a0b\u6c60\u6ce8\u518c\u4e2d\u5fc3 + \u7edf\u4e00\u7ba1\u63a7\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5728\u5927\u578b\u9879\u76ee\u4e2d\uff0c\u5f00\u53d1\u4eba\u5458 A \u5728\u7528\u6237\u670d\u52a1\u91cc\u00a0new\u00a0\u4e86\u4e00\u4e2a\u7ebf\u7a0b\u6c60\uff0c\u5f00\u53d1\u4eba\u5458 B \u5728\u8ba2\u5355\u670d\u52a1\u91cc\u4e5f\u00a0new\u00a0\u4e86\u4e00\u4e2a\u3002\u5927\u5bb6\u5404\u5199\u5404\u7684\uff0c\u53c2\u6570\u968f\u610f\u586b\uff08\u6709\u7684\u586b\u6700\u5927\u7ebf\u7a0b\u6570 200\uff0c\u6709\u7684\u586b\u00a0Integer.MAX_VALUE\uff09\u3002<\/li>\n\n\n\n<li>\u7531\u4e8e\u7f3a\u4e4f\u7edf\u4e00\u89c6\u89d2\uff0c\u6574\u4e2a\u7cfb\u7edf\u7684\u7ebf\u7a0b\u6570\u53ef\u80fd\u66b4\u6da8\uff0c\u5bfc\u81f4 CPU \u9891\u7e41\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u751a\u81f3\u5bfc\u81f4\u5185\u5b58\u6ea2\u51fa\uff08OOM\uff09\u3002\u8fd9\u5c31\u50cf\u4e00\u4e2a\u516c\u53f8\u91cc\uff0c\u6bcf\u4e2a\u90e8\u95e8\u7ecf\u7406\u90fd\u968f\u610f\u62db\u4eba\uff0c\u6700\u540e\u516c\u53f8\u4eba\u6ee1\u4e3a\u60a3\uff0c\u8fde\u5de5\u4f4d\u90fd\u4e0d\u591f\u5750\uff0c\u53d1\u5de5\u8d44\u90fd\u53d1\u4e0d\u51fa\u6765\u3002<\/li>\n\n\n\n<li><strong>\u89e3\u51b3\u65b9\u6848\uff08\u6ce8\u518c\u4e2d\u5fc3\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li><strong>\u6536\u6743<\/strong>\uff1a\u7981\u6b62\u4ee3\u7801\u91cc\u968f\u610f\u00a0new\u3002<\/li>\n\n\n\n<li><strong>\u767b\u8bb0<\/strong>\uff1a\u6240\u6709\u7684\u7ebf\u7a0b\u6c60\u5fc5\u987b\u5728\u4e00\u4e2a\u201c\u4e2d\u592e\u7cfb\u7edf\u201d\u91cc\u6ce8\u518c\u3002\u7cfb\u7edf\u77e5\u9053\u4f60\u53eb\u4ec0\u4e48\u540d\u5b57\u3001\u5728\u54ea\u4e2a\u670d\u52a1\u3001\u5f52\u8c01\u7ba1\u3002<\/li>\n\n\n\n<li><strong>\u4e0a\u5e1d\u89c6\u89d2<\/strong>\uff1a\u7ba1\u7406\u5458\u53ef\u4ee5\u770b\u5230\u5f53\u524d\u5e94\u7528\u91cc\u5230\u5e95\u8d77\u4e86\u591a\u5c11\u4e2a\u7ebf\u7a0b\u6c60\uff0c\u662f\u5426\u5408\u7406\uff0c\u4ece\u800c\u8fdb\u884c\u5168\u5c40\u7684\u8d44\u6e90\u7ba1\u63a7\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u75db\u70b9\u4e8c\uff1a\u53c2\u6570\u96be\u4f30\u7b97\u3001\u53ea\u80fd\u91cd\u53d1<\/h3>\n\n\n\n<p>\u53c2\u6570\u96be\u4f30\u7b97\u3001\u53ea\u80fd\u91cd\u53d1 -> \u9759\u6001\u914d\u7f6e &amp; \u65e0\u76d1\u63a7 -> \u8fd0\u884c\u4e2d\u70ed\u5237\u65b0 + \u5b9e\u65f6\u6307\u6807\u91c7\u96c6\u3002<\/p>\n\n\n\n<p>\u8bbe\u5b9a\u7ebf\u7a0b\u6c60\u53c2\u6570\uff08\u6838\u5fc3\u7ebf\u7a0b\u6570\u3001\u6700\u5927\u7ebf\u7a0b\u6570\u3001\u961f\u5217\u957f\u5ea6\uff09\u662f\u4e00\u95e8\u7384\u5b66\u3002\u4f60\u586b\u4e86\u00a0core=10\uff0c\u4e0a\u7ebf\u540e\u53d1\u73b0\u6d41\u91cf\u6fc0\u589e\uff0c\u961f\u5217\u79ef\u538b\u4e86\uff0c\u8fd9\u65f6\u5019\u4f60\u60f3\u6539\u6210\u00a020\u3002\u539f\u751f JDK \u4f60\u5fc5\u987b\u4fee\u6539\u4ee3\u7801\u6216\u914d\u7f6e\u6587\u4ef6 -> \u63d0\u4ea4\u4ee3\u7801 -> \u6253\u5305 ->\u00a0\u91cd\u542f\u670d\u52a1\u3002\u8fd9\u4e2a\u8fc7\u7a0b\u53ef\u80fd\u9700\u8981 20 \u5206\u949f\uff0c\u8fd9\u671f\u95f4\u7cfb\u7edf\u53ef\u80fd\u5df2\u7ecf\u5d29\u4e86\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u89e3\u51b3\u65b9\u6848\uff08\u52a8\u6001\u8c03\u6574\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li><strong>\u50cf\u8c03\u8282\u97f3\u91cf\u4e00\u6837<\/strong>\uff1a\u7ed3\u5408\u914d\u7f6e\u4e2d\u5fc3\uff08\u5982 Nacos\u3001Apollo\uff09\uff0c\u4f60\u5728\u914d\u7f6e\u4e2d\u5fc3\u628a\u00a010\u00a0\u6539\u6210\u00a020\uff0c\u670d\u52a1<strong>\u4e0d\u9700\u8981\u91cd\u542f<\/strong>\uff0c\u7ebf\u7a0b\u6c60\u7acb\u9a6c\u611f\u77e5\u5e76\u6269\u5bb9\u3002<\/li>\n\n\n\n<li><strong>\u6709\u636e\u53ef\u4f9d<\/strong>\uff1a\u914d\u5408\u201c\u5b9e\u65f6\u6307\u6807\u91c7\u96c6\u201d\uff0c\u4f60\u80fd\u770b\u5230\u5f53\u524d\u7684\u6d3b\u8dc3\u7ebf\u7a0b\u6570\u662f\u591a\u5c11\u3002\u5982\u679c\u770b\u5230\u957f\u671f\u7ef4\u6301\u5728 10\uff0c\u4f60\u624d\u6562\u653e\u5fc3\u5730\u6269\u5bb9\u5230 20\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u75db\u70b9\u4e09\uff1a\u961f\u5217\u5835\u585e \/ \u62d2\u7edd\u7b56\u7565\u201c\u9ed1\u76d2\u201d<\/h3>\n\n\n\n<p>\u961f\u5217\u5835\u585e \/ \u62d2\u7edd\u7b56\u7565\u201c\u9ed1\u76d2\u201d -> \u65e0\u544a\u8b66 &amp; \u65e0\u8ffd\u8e2a -> \u4e09\u91cd\u544a\u8b66\u89e6\u53d1\u5668\uff08\u6d3b\u8dc3\u5ea6 \/ \u961f\u5217 \/ \u62d2\u7edd\uff09\u3002<\/p>\n\n\n\n<p>JDK \u7ebf\u7a0b\u6c60\u662f\u4e00\u4e2a\u201c\u95f7\u846b\u82a6\u201d\u3002\u5f53\u4efb\u52a1\u5904\u7406\u4e0d\u8fc7\u6765\uff0c\u5806\u79ef\u5728\u961f\u5217\u91cc\u65f6\uff0c\u5b83\u4e0d\u8bf4\u8bdd\uff1b\u5f53\u961f\u5217\u6ee1\u4e86\uff0c\u5f00\u59cb\u629b\u5f03\u4efb\u52a1\uff08\u89e6\u53d1\u62d2\u7edd\u7b56\u7565\uff09\u65f6\uff0c\u5b83\u5f80\u5f80\u4e5f\u53ea\u662f\u9ed8\u9ed8\u629b\u4e2a\u5f02\u5e38\uff08\u5982\u679c\u5f00\u53d1\u6ca1\u6355\u83b7\u5e76\u6253\u5370\u65e5\u5fd7\uff0c\u5c31\u5f7b\u5e95\u6ca1\u4eba\u77e5\u9053\u4e86\uff09\u3002\u76f4\u5230\u7528\u6237\u6295\u8bc9\u201c\u600e\u4e48\u70b9\u4e0d\u52a8\u4e86\u201d\uff0c\u8fd0\u7ef4\u624d\u53d1\u73b0\u7cfb\u7edf\u5361\u6b7b\u4e86\u3002\u8fd9\u53eb\u201c\u9ed1\u76d2\u201d\uff0c\u91cc\u9762\u53d1\u751f\u4e86\u4ec0\u4e48\u5b8c\u5168\u770b\u4e0d\u89c1\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u89e3\u51b3\u65b9\u6848\uff08\u76d1\u63a7\u544a\u8b66\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li><strong>\u88c5\u4e0a\u4eea\u8868\u76d8<\/strong>\uff1a\u6211\u4eec\u8981\u5b9e\u65f6\u76d1\u63a7\u4e09\u4e2a\u6307\u6807\uff1a\n<ol class=\"wp-block-list\">\n<li><strong>\u6d3b\u8dc3\u5ea6<\/strong>\uff1a\u5e72\u6d3b\u7684\u7ebf\u7a0b\u662f\u4e0d\u662f\u5fd9\u75af\u4e86\uff1f<\/li>\n\n\n\n<li><strong>\u961f\u5217\u5bb9\u91cf<\/strong>\uff1a\u7b49\u5019\u5ba4\u662f\u4e0d\u662f\u5feb\u6324\u6ee1\u4e86\uff1f<\/li>\n\n\n\n<li><strong>\u62d2\u7edd\u91cf<\/strong>\uff1a\u662f\u4e0d\u662f\u5df2\u7ecf\u5f00\u59cb\u8d76\u4eba\u4e86\uff1f<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>\u81ea\u52a8\u62a5\u8b66<\/strong>\uff1a\u4e00\u65e6\u961f\u5217\u8d85\u8fc7 80%\uff0c\u6216\u8005\u6bcf\u79d2\u62d2\u7edd\u4e86 1 \u4e2a\u4efb\u52a1\uff0c\u7acb\u9a6c\u53d1\u9489\u9489\/\u90ae\u4ef6\u7ed9\u8d1f\u8d23\u4eba\uff1a\u201c\u51fa\u4e8b\u4e86\uff0c\u5feb\u53bb\u52a8\u6001\u8c03\u6574\u53c2\u6570\uff01\u201d<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u75db\u70b9\u56db\uff1a\u4e0b\u7ebf\u65f6\u4efb\u52a1\u4e22\u5931<\/h3>\n\n\n\n<p>\u4e0b\u7ebf\u65f6\u4efb\u52a1\u4e22\u5931 -> \u7ebf\u7a0b\u6c60\u751f\u547d\u5468\u671f\u7f3a\u53e3 -> \u4f18\u96c5\u5173\u95ed Hook (awaitTerminationMillis)\u3002<\/p>\n\n\n\n<p>\u5f53\u4f60\u53d1\u5e03\u65b0\u7248\u672c\uff0c\u9700\u8981\u91cd\u542f\u670d\u52a1\u65f6\uff08\u901a\u5e38\u662f\u00a0kill\u00a0\u8fdb\u7a0b\uff09\u3002\u6b64\u65f6\uff0c\u7ebf\u7a0b\u6c60\u91cc\u53ef\u80fd\u8fd8\u6709 5 \u4e2a\u4efb\u52a1\u6b63\u5728\u8dd1\uff0c\u961f\u5217\u91cc\u8fd8\u6709 100 \u4e2a\u4efb\u52a1\u5728\u6392\u961f\u3002\u539f\u751f JDK \u5982\u679c\u5904\u7406\u4e0d\u5f53\uff0c\u8fdb\u7a0b\u4e00\u6740\uff0c\u8fd9\u4e9b\u5185\u5b58\u91cc\u7684\u4efb\u52a1\u77ac\u95f4\u5168\u4e22\u4e86\u3002\u5982\u679c\u662f\u6d89\u53ca\u8d44\u91d1\u6216\u91cd\u8981\u6570\u636e\u7684\u4efb\u52a1\uff0c\u8fd9\u5c31\u662f\u751f\u4ea7\u4e8b\u6545\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u89e3\u51b3\u65b9\u6848\uff08\u4f18\u96c5\u5173\u95ed\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li><strong>Hook\uff08\u94a9\u5b50\uff09<\/strong>\uff1a\u5229\u7528 Java \u7684\u00a0ShutdownHook\u00a0\u673a\u5236\u3002<\/li>\n\n\n\n<li><strong>\u7f13\u51b2\u671f<\/strong>\uff1a\u5f53\u6536\u5230\u5173\u95ed\u4fe1\u53f7\u65f6\uff0c\u7ebf\u7a0b\u6c60<strong>\u4e0d\u63a5\u65b0\u5ba2<\/strong>\uff08\u62d2\u7edd\u65b0\u4efb\u52a1\uff09\uff0c\u4f46<strong>\u4fdd\u8bc1\u9001\u8d70\u8001\u5ba2<\/strong>\uff08\u6267\u884c\u5b8c\u6b63\u5728\u8fd0\u884c\u7684\u548c\u961f\u5217\u91cc\u6392\u961f\u7684\u4efb\u52a1\uff09\u3002<\/li>\n\n\n\n<li><strong>\u8d85\u65f6\u63a7\u5236<\/strong>\uff1a\u8bbe\u7f6e\u4e00\u4e2a\u00a0awaitTerminationMillis\uff08\u6bd4\u5982 10\u79d2\uff09\uff0c\u5982\u679c 10\u79d2\u8fd8\u6ca1\u5904\u7406\u5b8c\uff0c\u518d\u5f3a\u5236\u5173\u95ed\uff0c\u517c\u987e\u6570\u636e\u5b89\u5168\u548c\u53d1\u5e03\u6548\u7387\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u7ebf\u7a0b\u6c60\u95ee\u9898\u89e3\u51b3\u601d\u8def<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1\">1. \u7ebf\u7a0b\u6c60\u8d44\u6e90\u7ba1\u7406<\/h3>\n\n\n\n<p>\u6211\u4eec\u7684\u505a\u6cd5\u662f\u628a\u7ebf\u7a0b\u6c60\u7684\u58f0\u660e\u5168\u90e8<strong>\u6536\u655b\u5230\u914d\u7f6e\u4e2d\u5fc3<\/strong>\uff1a\u5148\u5728\u914d\u7f6e\u4e2d\u5fc3\u767b\u8bb0\uff0c\u518d\u7531\u5e94\u7528\u6309\u9700\u88c5\u914d\u3002\u8fd9\u6837\u4e0d\u4ec5\u80fd\u4e00\u773c\u770b\u5230\u6bcf\u4e2a\u7ebf\u7a0b\u6c60\u7684\u53c2\u6570\u4e0e\u4f7f\u7528\u573a\u666f\uff0c\u8fd8\u80fd\u5feb\u901f\u5224\u65ad\u662f\u5426\u53ef\u590d\u7528\uff0c\u4ece\u6e90\u5934\u4e0a\u675c\u7edd\u76f2\u76ee\u65b0\u5efa\u3001\u6d6a\u8d39\u670d\u52a1\u5668\u8d44\u6e90\u3002<strong>\u9879\u76ee\u7edf\u4e00\u7ea6\u5b9a\uff1a\u5982\u9700\u65b0\u589e\u7ebf\u7a0b\u6c60\uff0c\u5fc5\u987b\u5148\u5728\u914d\u7f6e\u4e2d\u5fc3\u5b8c\u6210\u767b\u8bb0<\/strong>\uff0c\u518d\u7531\u5e94\u7528\u81ea\u52a8\u88c5\u914d\uff0c\u786e\u4fdd\u89c4\u8303\u4e00\u81f4\u3001\u53ef\u8ffd\u6eaf\uff1a\u77e5\u9053\u8c01\u5728\u7528\u3001\u53c2\u6570\u662f\u591a\u5c11\uff0c\u675c\u7edd\u4e86\u201c\u91ce\u7ebf\u7a0b\u6c60\u201d\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2\">2. \u7ebf\u7a0b\u6c60\u53c2\u6570\u52a8\u6001\u53d8\u66f4<\/h3>\n\n\n\n<p id=\"2\">Nacos \u65e2\u662f\u914d\u7f6e\u4e2d\u5fc3\u4e5f\u662f\u6ce8\u518c\u4e2d\u5fc3\u3002<strong>\u53ea\u8981\u628a\u7ebf\u7a0b\u6c60\u53c2\u6570\u96c6\u4e2d\u5b58\u653e\u5728 Nacos<\/strong>\uff0cSpring Boot \u5ba2\u6237\u7aef\u5373\u53ef\u6301\u7eed\u76d1\u542c\u3002\u5f53\u68c0\u6d4b\u5230\u7ebf\u7a0b\u6c60\u914d\u7f6e\u6709\u66f4\u65b0\u65f6\uff0c\u7acb\u5373\u62c9\u53d6\u6700\u65b0\u53c2\u6570\u5e76\u89e6\u53d1<strong>\u52a8\u6001\u7ebf\u7a0b\u6c60\u5237\u65b0<\/strong>\u6d41\u7a0b\uff0c\u505a\u5230\u914d\u7f6e\u4e00\u6539\u3001\u7ebf\u4e0a\u79d2\u751f\u6548\uff1bJDK \u7684\u00a0ThreadPoolExecutor\u00a0\u5176\u5b9e\u672c\u8eab\u5c31\u652f\u6301\u901a\u8fc7\u00a0setCorePoolSize\u00a0\u7b49\u65b9\u6cd5\u52a8\u6001\u4fee\u6539\u53c2\u6570\uff0c\u53ea\u662f\u539f\u751f\u4ee3\u7801\u6ca1\u6cd5\u8fdc\u7a0b\u89e6\u53d1\u3002<\/p>\n\n\n\n<p>\u770b\u8d77\u6765\u53ea\u662f\u201c\u76d1\u542c-\u5237\u65b0\u201d\uff0c\u771f\u6b63\u843d\u5730\u5374\u6709\u4e24\u5ea7\u5927\u5c71\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1.<strong>YAML \u2192 Java \u6620\u5c04<\/strong>\uff1aSpring Boot \u76d1\u542c\u5668\u62ff\u5230\u7684\u4ec5\u662f\u4e00\u6bb5\u7eaf YAML \u5b57\u7b26\u4e32\u2014\u2014\u5982\u4f55\u4f18\u96c5\u5730\u53cd\u5e8f\u5217\u5316\u6210\u7ebf\u7a0b\u6c60\u914d\u7f6e\u5bf9\u8c61\uff1f<\/li>\n\n\n\n<li>2.<strong>\u591a\u914d\u7f6e\u4e2d\u5fc3\u7684\u4ee3\u7801\u590d\u7528<\/strong>\uff1a\u4f5c\u4e3a\u901a\u7528\u7ec4\u4ef6\uff0c\u6211\u4eec\u52bf\u5fc5\u8981\u540c\u65f6\u9002\u914d N \u4e2a\u914d\u7f6e\u4e2d\u5fc3\u3002\u600e\u6837\u62bd\u8c61\u516c\u5171\u903b\u8f91\uff0c\u65e2\u907f\u514d if-else \u8f70\u70b8\uff0c\u53c8\u80fd\u968f\u65f6 plug-in \u65b0\u914d\u7f6e\u4e2d\u5fc3\uff1f<\/li>\n<\/ol>\n\n\n\n<p>\u5148\u628a\u8fd9\u4e24\u4e2a\u7591\u95ee\u653e\u5728\u8111\u6d77\u91cc\uff0c\u4e0b\u9762\u7684\u65b9\u6848\u7ae0\u8282\u5c06\u9010\u4e00\u62c6\u89e3\u3002<\/p>\n\n\n\n<p>\u5229\u7528 Spring Boot \u5f3a\u5927\u7684\u00a0<strong>Binder\u00a0API<\/strong>\uff08Spring Boot 2.0+\uff09\u3002\u5b83\u53ef\u4ee5\u4f18\u96c5\u5730\u5c06\u677e\u6563\u7ed1\u5b9a\u7684\u914d\u7f6e\uff08YAML\/Properties\uff09\u7ed1\u5b9a\u5230\u5f3a\u7c7b\u578b\u7684 Java Bean \u4e0a\uff0c\u4e0d\u7528\u81ea\u5df1\u5199\u590d\u6742\u7684\u89e3\u6790\u903b\u8f91\u3002<\/p>\n\n\n\n<p>\u4eca\u5929\u8981 Nacos\uff0c\u660e\u5929\u53ef\u80fd\u8981 Apollo \u6216 Zookeeper\u3002<strong>\u62bd\u8c61 + \u7b56\u7565\u6a21\u5f0f\/SPI<\/strong>\u3002\u5b9a\u4e49\u4e00\u4e2a\u6807\u51c6\u63a5\u53e3\u00a0ConfigRefresher\uff0c\u7136\u540e\u9488\u5bf9 Nacos\u3001Apollo \u5206\u522b\u5199\u5b9e\u73b0\u7c7b\u3002\u542f\u52a8\u65f6\u6839\u636e\u914d\u7f6e\u6587\u4ef6\u51b3\u5b9a\u52a0\u8f7d\u54ea\u4e2a\u5b9e\u73b0\u7c7b\u3002\u8fd9\u53eb\u201c\u9762\u5411\u63a5\u53e3\u7f16\u7a0b\uff0c\u5bf9\u4fee\u6539\u5173\u95ed\uff0c\u5bf9\u6269\u5c55\u5f00\u653e\u201d\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3\">3. \u8fd0\u884c\u65f6\u901a\u77e5\u544a\u8b66<\/h3>\n\n\n\n<p>\u5982\u679c\u8ba9\u5927\u5bb6\u6765\u8bbe\u8ba1\u7ebf\u7a0b\u6c60\u544a\u8b66\uff0c\u4f1a\u5173\u6ce8\u54ea\u4e9b\u7ef4\u5ea6\uff1foneThread \u76ee\u524d\u63d0\u70bc\u51fa\u4e09\u6761\u201c\u9ad8\u547d\u4e2d\u201d\u544a\u8b66\u7b56\u7565\uff0c\u5e76\u7ed9\u51fa\u9ed8\u8ba4\u9608\u503c\u4e0e\u89e6\u53d1\u903b\u8f91\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u7ef4\u5ea6<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u89e6\u53d1\u6761\u4ef6<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u68c0\u6d4b\u542b\u4e49<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u6d3b\u8dc3\u5ea6<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>activeCount \/ maximumPoolSize<\/code> \u8fde\u7eed\u9ad8\u4e8e\u9608\u503c\uff08\u9ed8\u8ba4 80%\uff09<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7ebf\u7a0b\u8d44\u6e90\u5df2\u903c\u8fd1\u74f6\u9888\uff0c\u9700\u6269\u5bb9\u6216\u5bf9\u5165\u53e3\u6d41\u91cf\u505a\u9650\u6d41<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u961f\u5217\u8d1f\u8f7d<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>queueSize \/ queueCapacity<\/code> \u8d85\u8fc7\u9608\u503c<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6392\u961f\u4efb\u52a1\u6fc0\u589e\uff0c\u5904\u7406\u80fd\u529b\u88ab\u5165\u53e3\u6d41\u91cf\u538b\u5236\uff0c\u6613\u5f15\u53d1\u5927\u9762\u79ef\u8d85\u65f6<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u62d2\u7edd\u5f02\u5e38<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u76d1\u63a7\u5230\u65b0\u7684 <code>RejectedExecutionException<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7ebf\u7a0b\u6c60\u5df2\u65e0\u6cd5\u63a5\u6536\u65b0\u4efb\u52a1\uff0c\u5c5e\u4e8e\u963b\u65ad\u573a\u666f\uff0c\u5e94\u7acb\u523b\u4ecb\u5165<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u6d3b\u8dc3\u5ea6\u548c\u961f\u5217\u8d1f\u8f7d\u7684\u76d1\u63a7\u89c4\u5219\u8f83\u4e3a\u7b80\u5355\uff0c\u901a\u8fc7\u5b9a\u65f6\u4efb\u52a1\u626b\u63cf\u5373\u53ef\u5b9e\u73b0\u3002\u4e0d\u8fc7\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5b9a\u65f6\u4efb\u52a1\u7684\u6267\u884c\u95f4\u9694\u9700\u5408\u7406\u8bbe\u7f6e\uff1a\u8fc7\u77ed\u4f1a\u56e0\u76d1\u63a7 API \u52a0\u9501\u5bfc\u81f4\u4e0e\u7ebf\u7a0b\u6c60\u5176\u4ed6\u64cd\u4f5c\u7ade\u4e89\u9501\u8d44\u6e90\uff0c\u8fc7\u957f\u5219\u53ef\u80fd\u9519\u8fc7\u91cd\u8981\u7684\u544a\u8b66\u65f6\u673a\u3002oneThread \u5728\u5145\u5206\u6743\u8861\u540e\uff0c\u9ed8\u8ba4\u5c06\u626b\u63cf\u95f4\u9694\u8bbe\u7f6e\u4e3a <strong>5 \u79d2<\/strong>\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * \u68c0\u67e5\u7ebf\u7a0b\u6d3b\u8dc3\u5ea6\uff08\u6d3b\u8dc3\u7ebf\u7a0b\u6570 \/ \u6700\u5927\u7ebf\u7a0b\u6570\uff09\n *\/privatevoidcheckActiveRate(ThreadPoolExecutorHolder holder){ThreadPoolExecutor executor = holder.getExecutor();ThreadPoolExecutorProperties properties = holder.getExecutorProperties();\n\u200b\n &nbsp; &nbsp;int activeCount = executor.getActiveCount();\/\/ API \u6709\u9501\uff0c\u907f\u514d\u9ad8\u9891\u7387\u8c03\u7528int maximumPoolSize = executor.getMaximumPoolSize();\n\u200b\n &nbsp; &nbsp;if(maximumPoolSize ==0){return;}\n\u200b\n &nbsp; &nbsp;int activeRate =(int)Math.round((activeCount *100.0)\/ maximumPoolSize);int threshold = properties.getAlarm().getActiveThreshold();\n\u200b\n &nbsp; &nbsp;if(activeRate &gt;= threshold){sendAlarmMessage(\"Activity\", holder);}}<\/code><\/pre>\n\n\n\n<p>\u7ebf\u7a0b\u6c60\u83b7\u53d6\u6d3b\u8dc3\u7ebf\u7a0b\u65b9\u6cd5\u6e90\u4ee3\u7801\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>publicintgetActiveCount(){\/\/ \u83b7\u53d6\u4e86\u7ebf\u7a0b\u6c60\u6838\u5fc3\u4e3b\u9501finalReentrantLock mainLock =this.mainLock;\n &nbsp; &nbsp;mainLock.lock();try{int n =0;for(Worker w : workers)if(w.isLocked())++n;return n;}finally{\n &nbsp; &nbsp; &nbsp; &nbsp;mainLock.unlock();}}<\/code><\/pre>\n\n\n\n<p>\u62d2\u7edd\u7b56\u7565\u7684\u544a\u8b66\u673a\u5236\u662f\u901a\u8fc7\u52a8\u6001\u4ee3\u7406\u5b9e\u73b0\u7684\uff1a\u6bcf\u5f53\u7ebf\u7a0b\u6c60\u89e6\u53d1\u4e00\u6b21\u62d2\u7edd\u7b56\u7565\uff0c\u5bf9\u5e94\u7684\u8ba1\u6570\u5668\u5c31\u81ea\u589e\u4e00\u6b21\u3002\u5728\u5b9a\u65f6\u4efb\u52a1\u626b\u63cf\u65f6\uff0c\u4f1a\u6bd4\u8f83\u5f53\u524d\u7684\u62d2\u7edd\u6b21\u6570\u4e0e\u4e0a\u6b21\u626b\u63cf\u8bb0\u5f55\u7684\u6b21\u6570\uff0c\u5982\u679c\u51fa\u73b0\u65b0\u589e\uff0c\u5219\u7acb\u5373\u89e6\u53d1\u544a\u8b66\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>privatefinalMap&lt;String, Long&gt; lastRejectCountMap =newConcurrentHashMap&lt;&gt;();\n\u200b\n\/**\n * \u68c0\u67e5\u62d2\u7edd\u7b56\u7565\u6267\u884c\u6b21\u6570\n *\/privatevoidcheckRejectCount(ThreadPoolExecutorHolder holder){ThreadPoolExecutor executor = holder.getExecutor();String threadPoolId = holder.getThreadPoolId();\n\u200b\n &nbsp; &nbsp;\/\/ \u53ea\u5904\u7406\u81ea\u5b9a\u4e49\u7ebf\u7a0b\u6c60\u7c7b\u578bif(!(executor instanceofOneThreadExecutor)){return;}\n\u200b\n &nbsp; &nbsp;OneThreadExecutor oneThreadExecutor =(OneThreadExecutor) executor;long currentRejectCount = oneThreadExecutor.getRejectCount().get();long lastRejectCount = lastRejectCountMap.getOrDefault(threadPoolId,0L);\n\u200b\n &nbsp; &nbsp;\/\/ \u9996\u6b21\u521d\u59cb\u5316\u6216\u62d2\u7edd\u6b21\u6570\u589e\u52a0\u65f6\u89e6\u53d1if(currentRejectCount &gt; lastRejectCount){sendAlarmMessage(\"Reject\", holder);\/\/ \u66f4\u65b0\u6700\u540e\u8bb0\u5f55\u503c\n &nbsp; &nbsp; &nbsp; &nbsp;lastRejectCountMap.put(threadPoolId, currentRejectCount);}}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1. \u6d3b\u8dc3\u5ea6\u76d1\u63a7\uff08Active Count\uff09<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4ee3\u7801\u89e3\u8bfb<\/strong>\uff1a<code>activeRate = (activeCount \/ maximumPoolSize) * 100<\/code><\/li>\n\n\n\n<li>\u4f60\u770b\u6e90\u7801\u7247\u6bb5\uff1amainLock.lock()\u3002JDK \u83b7\u53d6\u6d3b\u8dc3\u7ebf\u7a0b\u6570\u65f6\uff0c<strong>\u9700\u8981\u83b7\u53d6\u5168\u5c40\u9501<\/strong>\uff01\n<ul class=\"wp-block-list\">\n<li>\u8fd9\u610f\u5473\u7740\uff0c\u5f53\u4f60\u53bb\u6570\u6709\u591a\u5c11\u4eba\u5728\u5e72\u6d3b\u65f6\uff0c<strong>\u6240\u6709\u60f3\u8fdb\u51fa\u5728\u8fd9\u4e2a\u7ebf\u7a0b\u6c60\u7684\u4efb\u52a1\u90fd\u5f97\u6682\u505c\u7b49\u5f85<\/strong>\u3002<\/li>\n\n\n\n<li>\u76d1\u63a7\u4e0d\u80fd\u55a7\u5bbe\u593a\u4e3b\u3002\u5982\u679c\u6bcf 10\u6beb\u79d2\u76d1\u63a7\u4e00\u6b21\uff0c\u7ebf\u7a0b\u6c60\u5149\u5fd9\u7740\u7ed9\u4f60\u6c47\u62a5\u4eba\u6570\u4e86\uff0c\u6b63\u4e8b\u90fd\u5e72\u4e0d\u4e86\u3002<strong>5\u79d2<\/strong>\u662f\u4e00\u4e2a\u5728\u201c\u5b9e\u65f6\u6027\u201d\u548c\u201c\u6027\u80fd\u635f\u8017\u201d\u4e4b\u95f4\u5e73\u8861\u7684\u7ecf\u9a8c\u503c\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2. \u62d2\u7edd\u7b56\u7565\u544a\u8b66\uff08Rejection\uff09<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u75db\u70b9<\/strong>\uff1aJDK \u7684\u62d2\u7edd\u7b56\u7565\uff08\u5982\u00a0AbortPolicy\uff09\u53ea\u4f1a\u629b\u5f02\u5e38\uff0c\u6216\u8005\u9759\u9ed8\u4e22\u5f03\uff0c\u4e0d\u4f1a\u4e3b\u52a8\u544a\u8bc9\u4f60\u201c\u6211\u62d2\u5355\u4e86\u201d\u3002<\/li>\n\n\n\n<li><strong>\u89e3\u6cd5\uff1a\u88c5\u9970\u5668\u6a21\u5f0f\uff08Proxy\uff09<\/strong>\u3002\n<ul class=\"wp-block-list\">\n<li><strong>\u539f\u7406<\/strong>\uff1a\u4e0d\u76f4\u63a5\u4f7f\u7528 JDK \u7684\u00a0AbortPolicy\uff0c\u800c\u662f\u5305\u4e00\u5c42\uff0c\u505a\u4e00\u4e2a\u00a0RejectHandlerWrapper\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {\n    \/\/ 1. \u8bb0\u8d26\uff1a\u8ba1\u6570\u5668 +1\n    atomicCounter.incrementAndGet();\n    \/\/ 2. \u62a5\u8b66\uff1a\u5982\u679c\u914d\u7f6e\u4e86\u5b9e\u65f6\u62a5\u8b66\uff0c\u53d1\u4e2a\u9489\u9489\n    \/\/ 3. \u539f\u8def\u653e\u884c\uff1a\u6267\u884c\u539f\u6765\u7684\u62d2\u7edd\u903b\u8f91\uff08\u629b\u5f02\u5e38\u7b49\uff09\n    originalHandler.rejectedExecution(r, e);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4\">4. \u7ebf\u7a0b\u6c60\u8fd0\u884c\u76d1\u63a7<\/h3>\n\n\n\n<p>\u7ebf\u7a0b\u6c60\u76d1\u63a7\u5e76\u975e\u9526\u4e0a\u6dfb\u82b1\uff0c\u800c\u662f\u9ad8\u5e76\u53d1\u5e94\u7528\u7684\u6838\u5fc3\u57fa\u7840\u8bbe\u65bd\u4e4b\u4e00\u3002\u65e5\u5e38\u5f00\u53d1\u4e2d\uff0c\u7ebf\u7a0b\u6c60\u867d\u7136\u63d0\u5347\u4e86\u7cfb\u7edf\u6027\u80fd\uff0c\u4f46\u9690\u85cf\u7684\u98ce\u9669\u5374\u4e0d\u5bb9\u5ffd\u89c6\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7ebf\u7a0b\u6c60\u4efb\u52a1\u6392\u961f\u8fc7\u957f\u3001\u62d2\u7edd\u4efb\u52a1\u65f6\uff0c\u4e1a\u52a1\u53ef\u80fd\u51fa\u73b0\u5927\u9762\u79ef\u8d85\u65f6\u751a\u81f3\u762b\u75ea\uff0c\u4f46\u5982\u679c\u7f3a\u4e4f\u76d1\u63a7\u673a\u5236\uff0c\u5f00\u53d1\u4eba\u5458\u5f88\u96be\u5728\u6545\u969c\u521d\u671f\u53d1\u73b0\u95ee\u9898\u6839\u6e90\u3002<\/li>\n\n\n\n<li>\u76d1\u63a7\u80fd\u53ca\u65f6\u8bc6\u522b\u5f02\u5e38\uff0c\u5e2e\u52a9\u6280\u672f\u4eba\u5458\u7b2c\u4e00\u65f6\u95f4\u4ecb\u5165\u5904\u7406\uff0c\u964d\u4f4e\u4e1a\u52a1\u53d7\u635f\u7a0b\u5ea6\u3002<\/li>\n\n\n\n<li>\u672a\u7ecf\u76d1\u63a7\u7684\u7ebf\u7a0b\u6c60\u5f80\u5f80\u5b58\u5728\u8d44\u6e90\u6d6a\u8d39\uff08\u7ebf\u7a0b\u6570\u8fc7\u591a\uff09\u6216\u6027\u80fd\u74f6\u9888\uff08\u7ebf\u7a0b\u6570\u8fc7\u5c11\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u660e\u786e\u7ebf\u7a0b\u6c60\u76d1\u63a7\u7684\u6838\u5fc3\u9700\u6c42\uff0c\u4e00\u822c\u5206\u4e3a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u6307\u6807<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u9700\u6c42\u70b9<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u9700\u8981\u7a0b\u5ea6<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u6d3b\u8dc3\u7ebf\u7a0b\u6570<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5224\u65ad\u7ebf\u7a0b\u6c60\u662f\u5426\u903c\u8fd1\u6027\u80fd\u74f6\u9888<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u2b50\ufe0f\u2b50\ufe0f<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u961f\u5217\u8d1f\u8f7d<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u8bc6\u522b\u4efb\u52a1\u5806\u79ef\u98ce\u9669<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u2b50\ufe0f\u2b50\ufe0f\u2b50\ufe0f<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u62d2\u7edd\u7b56\u7565\u89e6\u53d1<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u53ca\u65f6\u53d1\u73b0\u7ebf\u7a0b\u6c60\u6ea2\u51fa\u5f02\u5e38<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u2b50\ufe0f\u2b50\ufe0f\u2b50\ufe0f\u2b50\ufe0f<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u901a\u5e38\u300e\u62d2\u7edd\u7b56\u7565\u300f\u76f8\u5bf9\u66f4\u590d\u6742\uff0c\u56e0\u4e3a\u9700\u8981\u989d\u5916\u8bbe\u8ba1\u673a\u5236\uff08\u5982\u52a8\u6001\u4ee3\u7406\u7b49\uff09\u8fdb\u884c\u7edf\u8ba1\u3002<\/p>\n<\/blockquote>\n\n\n\n<p>\u5728\u5f53\u524d\u4e3b\u6d41\u7684\u76d1\u63a7\u4e2d\u95f4\u4ef6\u4e2d\uff0c<strong>Prometheus + Grafana<\/strong> \u662f\u4e00\u5957\u6210\u719f\u3001\u6613\u7528\u4e14\u7a33\u5b9a\u7684\u7ec4\u5408\u65b9\u6848\uff0c\u5e7f\u6cdb\u5e94\u7528\u4e8e\u5404\u7c7b\u7cfb\u7edf\u7684\u6307\u6807\u76d1\u63a7\u573a\u666f\u3002\u9009\u62e9\u5b83\u4eec\u4f5c\u4e3a\u7ebf\u7a0b\u6c60\u76d1\u63a7\u7684\u57fa\u7840\uff0c\u4e3b\u8981\u57fa\u4e8e\u4ee5\u4e0b\u8003\u8651\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Prometheus<\/strong> \u91c7\u7528\u4e3b\u52a8\u62c9\u53d6\uff08Pull\uff09\u6a21\u578b\uff0c\u80fd\u591f\u5b9a\u65f6\u6293\u53d6\u7ebf\u7a0b\u6c60\u7684\u6838\u5fc3\u8fd0\u884c\u6307\u6807\uff0c\u5982\u6d3b\u8dc3\u7ebf\u7a0b\u6570\u3001\u961f\u5217\u957f\u5ea6\u3001\u62d2\u7edd\u6b21\u6570\u7b49\u3002\u540c\u65f6\u5185\u7f6e\u65f6\u5e8f\u6570\u636e\u5e93\uff0c\u90e8\u7f72\u7b80\u5355\u3001\u6027\u80fd\u53ef\u9760\uff0c\u5df2\u5728\u5927\u91cf\u573a\u666f\u4e2d\u9a8c\u8bc1\u5176\u7a33\u5b9a\u6027\u3002<\/li>\n\n\n\n<li><strong>Grafana<\/strong> \u4e0e Prometheus \u6df1\u5ea6\u96c6\u6210\uff0c\u914d\u7f6e\u6570\u636e\u6e90\u5373\u53ef\u4f7f\u7528\uff0c\u652f\u6301\u4e30\u5bcc\u7684\u56fe\u8868\u7c7b\u578b\u548c\u7075\u6d3b\u7684\u4eea\u8868\u76d8\u5b9a\u5236\uff0c\u80fd\u591f\u6e05\u6670\u5c55\u793a\u7ebf\u7a0b\u6c60\u7684\u8fd0\u884c\u72b6\u6001\u4e0e\u5386\u53f2\u8d8b\u52bf\uff0c\u4fbf\u4e8e\u95ee\u9898\u5b9a\u4f4d\u4e0e\u8fd0\u7ef4\u51b3\u7b56\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u901a\u8fc7 Prometheus \u91c7\u96c6\u4e0e\u5b58\u50a8\u6307\u6807\uff0c\u914d\u5408 Grafana \u7684\u53ef\u89c6\u5316\u80fd\u529b\uff0c\u6784\u5efa\u5b8c\u6574\u7684\u7ebf\u7a0b\u6c60\u76d1\u63a7\u4f53\u7cfb\uff0c\u65e2\u9002\u7528\u4e8e\u5f00\u53d1\u8c03\u8bd5\uff0c\u4e5f\u9002\u7528\u4e8e\u751f\u4ea7\u73af\u5883\u7684\u6301\u7eed\u89c2\u6d4b\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5\">5. \u4f18\u96c5\u5173\u95ed\u9632\u4efb\u52a1\u4e22\u5931<\/h3>\n\n\n\n<p>\u5982\u679c\u4ec5\u6309\u793a\u4f8b\u4ee3\u7801\u76f4\u63a5\u521b\u5efa\u5e76\u4f7f\u7528\u7ebf\u7a0b\u6c60\uff0c\u800c <strong>\u6ca1\u6709\u8865\u5145\u4efb\u4f55\u4f18\u96c5\u505c\u673a\u903b\u8f91<\/strong>\uff0c\u4e00\u65e6\u5e94\u7528\u5173\u95ed\u6216\u91cd\u542f\uff0c\u7ebf\u7a0b\u6c60\u4e2d\u5c1a\u672a\u5904\u7406\u5b8c\u7684\u4efb\u52a1\u5fc5\u7136\u4e22\u5931\u3002\u539f\u56e0\u5728\u4e8e\uff1a\u5e94\u7528\u505c\u673a\u6d41\u7a0b\u91cc\u7f3a\u5c11\u201c\u515c\u5e95\u201d\u6b65\u9aa4\u2014\u2014\u5148\u68c0\u6d4b\u7ebf\u7a0b\u6c60\u662f\u5426\u4ecd\u6709\u5f85\u6267\u884c\u4efb\u52a1\uff0c\u518d\u5728\u8bbe\u5b9a\u7684\u5bbd\u9650\u671f\u5185\u7b49\u5f85\u5176\u5b8c\u6210\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@ServicepublicclassThreadPoolHookTest{\n\u200b\n &nbsp; &nbsp;privateThreadPoolExecutor executor =ThreadPoolExecutorBuilder.builder().corePoolSize(2).maximumPoolSize(4).keepAliveTime(9999L).awaitTerminationMillis(5000L).workQueueType(BlockingQueueTypeEnum.LINKED_BLOCKING_QUEUE).threadFactory(\"onethread-producer_\").rejectedHandler(newThreadPoolExecutor.CallerRunsPolicy()).build();publicvoidsendMessage(){\/\/ xxx\n &nbsp; &nbsp; &nbsp; &nbsp;executor.execute(()-&gt;System.out.println(\"Test...\"));}}<\/code><\/pre>\n\n\n\n<p>\u8fd9\u79cd\u515c\u5e95\u901a\u5e38\u4f9d\u8d56 <strong>Shutdown Hook<\/strong>\uff1a\u5f53\u8fdb\u7a0b\u6536\u5230\u505c\u6b62\u4fe1\u53f7\u65f6\uff0c\u7cfb\u7edf\u4f1a\u8c03\u7528\u9884\u5148\u6ce8\u518c\u7684 Hook\uff0c\u5728\u771f\u6b63\u9000\u51fa\u524d\u6267\u884c\u81ea\u5b9a\u4e49\u6e05\u7406\u4ee3\u7801\u3002\u82e5\u672a\u6ce8\u518c Hook\uff0c\u7ebf\u7a0b\u6c60\u4f1a\u88ab\u7acb\u5373\u7ec8\u6b62\uff0c\u6b8b\u4f59\u4efb\u52a1\u4e5f\u968f\u4e4b\u4e22\u5f03\u3002<\/p>\n\n\n\n<p>Hook \u5728\u5f53\u524d\u5e94\u7528\u5c42\u9762\u53ef\u4ee5\u5206\u4e3a\u4e09\u7c7b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u5c42\u6b21<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u89e6\u53d1\u65b9\u5f0f<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u5178\u578b\u7528\u6cd5<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u64cd\u4f5c\u7cfb\u7edf\u4fe1\u53f7<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>SIGTERM<\/code> \/ <code>SIGINT<\/code> \/ <code>SIGKILL<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5bb9\u5668\u7f16\u6392\u3001CI\/CD \u6eda\u52a8\u53d1\u5e03\u4f1a\u53d1 <code>SIGTERM<\/code> \u901a\u77e5\u5e94\u7528\u9000\u51fa<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>JVM ShutdownHook<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>Runtime.getRuntime().addShutdownHook()<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6700\u540e\u65f6\u523b\u6267\u884c Java \u7ebf\u7a0b\uff0c\u5904\u7406\u81ea\u5b9a\u4e49\u6e05\u7406\u903b\u8f91<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u6846\u67b6 \/ \u5bb9\u5668 Hook<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Spring\u3001Tomcat\u3001Netty \u7b49\u6846\u67b6\u751f\u547d\u5468\u671f\u56de\u8c03<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5728 <strong>Bean<\/strong> \u7ea7\u522b\u6216 <strong>\u7ec4\u4ef6<\/strong> \u7ea7\u522b\u505a\u6536\u5c3e\u5de5\u4f5c<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u8fd9\u4e09\u5c42 Hook <strong>\u81ea\u4e0a\u800c\u4e0b\u4e32\u8054<\/strong>\uff1a<code>SIGTERM<\/code> \u2192 JVM \u6355\u83b7\u5e76\u89e6\u53d1 ShutdownHook \u2192 Spring \u53d1\u5e03 <code>ContextClosedEvent<\/code> \u2192 Bean \u9500\u6bc1\u56de\u8c03\u3002<\/p>\n\n\n\n<p>\u5728 <strong>oneThread<\/strong> \u4e2d\uff0c\u6211\u4eec\u5229\u7528 <strong>Spring Bean \u7ea7 Hook<\/strong>\uff08DisposableBean\u00a0\u63a5\u53e3\u6216\u00a0@PreDestroy\u00a0\u6ce8\u89e3\uff09\u5b8c\u6210\u7ebf\u7a0b\u6c60\u7684<strong>\u4efb\u52a1\u68c0\u6d4b\u4e0e\u7b49\u5f85<\/strong>\uff1a\u6536\u5230\u505c\u673a\u4fe1\u53f7\u540e\uff0c\u5148\u68c0\u67e5\u7ebf\u7a0b\u6c60\u4e2d\u662f\u5426\u4ecd\u6709\u672a\u5b8c\u6210\u4efb\u52a1\uff0c\u518d\u5728\u8bbe\u5b9a\u7684\u5bbd\u9650\u671f\u5185\u8c03\u7528 <code>awaitTermination<\/code>\uff0c\u786e\u4fdd\u4efb\u52a1\u5c3d\u91cf\u6267\u884c\u5b8c\u6bd5\u540e\u518d\u9000\u51fa\u3002<\/p>\n\n\n\n<p><strong>\u5207\u65ad\u5165\u53e3<\/strong>\uff1a\u544a\u8bc9\u7ebf\u7a0b\u6c60\u00a0shutdown()\uff0c\u4e0d\u518d\u63a5\u6536\u65b0\u4efb\u52a1\uff08\u5546\u573a\u6302\u4e0a\u201c\u505c\u6b62\u8425\u4e1a\u201d\u724c\u5b50\uff09\u3002<\/p>\n\n\n\n<p><strong>\u8010\u5fc3\u7b49\u5f85<\/strong>\uff1a\u8c03\u7528\u00a0awaitTermination(5000)\uff0c\u7ed9\u6b63\u5728\u8dd1\u7684\u4efb\u52a1 5\u79d2\u949f\u65f6\u95f4\u505a\u5b8c\uff08\u4fdd\u5b89\u7b49\u987e\u5ba2\u8d70\u5b8c\uff09\u3002<\/p>\n\n\n\n<p><strong>\u5f3a\u5236\u9a71\u9010<\/strong>\uff1a\u5982\u679c 5\u79d2\u8fd8\u6ca1\u5e72\u5b8c\uff0c\u4e0d\u7ba1\u4e86\uff0c\u5f3a\u5236\u5173\u95ed\uff08shutdownNow\uff09\uff0c\u9632\u6b62\u670d\u52a1\u8fd9\u5c31\u5361\u6b7b\u505c\u4e0d\u4e0b\u6765\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u57fa\u7840\u7ec4\u4ef6\u5f00\u53d1\u7ecf\u9a8c<\/h2>\n\n\n\n<p>\u8fd9\u662f\u4e00\u6bb5\u7ecf\u9a8c\u4e4b\u8c08\uff0c\u6838\u5fc3\u903b\u8f91\u662f\u201c\u4e0d\u80fd\u53ea\u6709 Starter\u201d\uff1b\u00a0oneThread\u00a0\u6bd4\u4f5c\u4e00\u53f0\u9ad8\u6027\u80fd\u7535\u8111\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>core\u00a0\u662f CPU<\/strong>\uff1a\u5b83\u8d1f\u8d23\u771f\u6b63\u7684\u8ba1\u7b97\u548c\u903b\u8f91\uff08\u52a8\u6001\u8c03\u6574\u53c2\u6570\u3001\u76d1\u63a7\u91c7\u96c6\uff09\u3002\u8fd9\u90e8\u5206\u4ee3\u7801\u5e94\u8be5\u662f\u7eaf\u51c0\u7684 Java \u4ee3\u7801\uff0c\u4e0d\u5e94\u8be5\u5173\u5fc3\u4f60\u662f\u63d2\u5728 Windows\u7684Spring Boot\u4e0a\uff0c\u8fd8\u662f Linux\u7684\u7eaf Spring\u65e0\u7b2c\u4e09\u65b9\u4e0a\uff0c\u751a\u81f3\u662f\u88f8\u673a\uff08\u7eaf Java Main\uff09\u4e0a\u8fd0\u884c\u3002<\/li>\n\n\n\n<li><strong>spring-base\u00a0\u662f\u9a71\u52a8\u7a0b\u5e8f\u63a5\u53e3<\/strong>\uff1a\u5b83\u8d1f\u8d23\u628a CPU \u5bf9\u63a5\u5230\u64cd\u4f5c\u7cfb\u7edf\u5185\u6838\uff08Spring Context\uff09\u3002<\/li>\n\n\n\n<li><strong>starter\u00a0\u662f\u5373\u63d2\u5373\u7528\u7684 USB \u534f\u8bae\uff08\u81ea\u52a8\u88c5\u914d\uff09<\/strong>\uff1a\u5b83\u8d1f\u8d23\u68c0\u6d4b\u73af\u5883\uff0c\u201c\u54e6\uff0c\u4f60\u7528\u4e86 Spring Boot\uff0c\u90a3\u6211\u81ea\u52a8\u5e2e\u4f60\u628a CPU \u9a71\u52a8\u88c5\u597d\u201d\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5982\u679c\u505a\u6210\u4e00\u4e2a\u5927\u5305\u7684\u540e\u679c\uff1a\u5c31\u50cf\u628a\u00a0CPU\u3001\u4e3b\u677f\u3001\u663e\u793a\u5668\u710a\u6b7b\u5728\u4e00\u8d77\uff0c\u53d8\u621020\u5e74\u4ee5\u524d\u7684\u90a3\u79cd\u4e3b\u677f\u4e86<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7528\u6237\u53ea\u60f3\u6362\u4e2a\u663e\u793a\u5668\uff08\u6362\u914d\u7f6e\u4e2d\u5fc3\uff09\uff1a\u4e0d\u884c\uff0c\u5fc5\u987b\u6574\u673a\u6362\u3002<\/li>\n\n\n\n<li>\u7528\u6237\u60f3\u88c5\u4e2a\u8001\u7cfb\u7edf\uff08\u975e Spring Boot \u9879\u76ee\uff09\uff1a\u4e0d\u884c\uff0c\u63a5\u53e3\u4e0d\u517c\u5bb9\uff0c\u63d2\u4e0d\u8fdb\u53bb\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>.\n\u251c\u2500\u2500 core # \u52a8\u6001\u7ebf\u7a0b\u6c60\u6838\u5fc3\u6a21\u5757\u5305\uff0c\u5b9e\u73b0\u52a8\u6001\u7ebf\u7a0b\u6c60\u76f8\u5173\u57fa\u7840\u7c7b\u5b9a\u4e49\n\u251c\u2500\u2500 dashboard-dev # \u5e94\u5e7f\u5927\u540c\u5b66\u8981\u6c42\uff0c\u4ee5\u540e\u6bcf\u4e2a\u9879\u76ee\u5c3d\u91cf\u6709\u524d\u7aef\u9875\u9762\u65b9\u4fbf\u67e5\u770b\u548c\u8c03\u8bd5\n\u251c\u2500\u2500 example # \u52a8\u6001\u7ebf\u7a0b\u6c60\u793a\u4f8b\u5305\uff0c\u6f14\u793a\u7ebf\u7a0b\u6c60\u52a8\u6001\u53c2\u6570\u53d8\u66f4\u3001\u76d1\u63a7\u548c\u544a\u8b66\u7b49\u529f\u80fd\n\u2502   \u251c\u2500\u2500 apollo-example\n\u2502   \u2514\u2500\u2500 nacos-cloud-example\n\u251c\u2500\u2500 spring-base # \u52a8\u6001\u7ebf\u7a0b\u6c60\u57fa\u7840\u6a21\u5757\u5305\uff0c\u5305\u542bSpring\u626b\u63cf\u52a8\u6001\u7ebf\u7a0b\u6c60\u3001\u662f\u5426\u542f\u7528\u4ee5\u53caBanner\u6253\u5370\u7b49\n\u2514\u2500\u2500 starter # \u52a8\u6001\u7ebf\u7a0b\u6c60\u914d\u7f6e\u4e2d\u5fc3\u7ec4\u4ef6\u5305\uff0c\u5b9e\u73b0\u7ebf\u7a0b\u6c60\u7ed3\u5408Spring\u6846\u67b6\u548c\u914d\u7f6e\u4e2d\u5fc3\u52a8\u6001\u5237\u65b0\n    \u251c\u2500\u2500 adapter # \u52a8\u6001\u7ebf\u7a0b\u6c60\u9002\u914d\u5c42\uff0c\u6bd4\u5982\u5bf9\u63a5 Web \u5bb9\u5668 Tomcat \u7ebf\u7a0b\u6c60\u7b49\n    \u2502   \u2514\u2500\u2500 web-spring-boot-starter # Web \u5bb9\u5668\u7ebf\u7a0b\u6c60\u7ec4\u4ef6\u5e93\n    \u251c\u2500\u2500 apollo-spring-boot-starter # Apollo \u914d\u7f6e\u4e2d\u5fc3\u52a8\u6001\u76d1\u63a7\u7ebf\u7a0b\u6c60\u7ec4\u4ef6\u5e93\n    \u251c\u2500\u2500 common-spring-boot-starter # \u914d\u7f6e\u4e2d\u5fc3\u516c\u5171\u76d1\u542c\u7b49\u903b\u8f91\u62bd\u8c61\u7ec4\u4ef6\u5e93\n    \u251c\u2500\u2500 dashboard-dev-spring-boot-starter # \u63a7\u5236\u53f0 API \u7ec4\u4ef6\u5e93\n    \u2514\u2500\u2500 nacos-cloud-spring-boot-starter # Nacos \u914d\u7f6e\u4e2d\u5fc3\u52a8\u6001\u76d1\u63a7\u7ebf\u7a0b\u6c60\u7ec4\u4ef6\u5e93<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b2c\u4e00\u5c42\uff1acore\u7eaf Java \u5b9e\u73b0 <strong>0 \u4f9d\u8d56<\/strong>\uff0c<\/h4>\n\n\n\n<p>\u6709\u4e9b\u8001\u7cfb\u7edf\u53ef\u80fd\u8fd8\u5728\u7528 SSH\uff08Struts+Spring+Hibernate\uff09\u751a\u81f3\u53ea\u662f\u7b80\u5355\u7684 Java \u5b88\u62a4\u8fdb\u7a0b\u3002\u5982\u679c\u4f60\u7684\u903b\u8f91\u91cc\u5939\u6742\u4e86\u00a0@Configuration\u8fd9\u79cdSpring Boot \u4e13\u5c5e\u6ce8\u89e3\uff0c\u8fd9\u4e9b\u8001\u7cfb\u7edf\u76f4\u63a5\u62a5\u9519\uff0c\u6839\u672c\u5f15\u4e0d\u8fdb\u6765\u3002<\/p>\n\n\n\n<p><strong>\u4ef7\u503c<\/strong>\uff1a\u4fdd\u8bc1\u4e86<strong>\u6700\u5927\u517c\u5bb9\u6027<\/strong>\u3002\u53ea\u8981\u6709 JDK\uff0c\u5c31\u80fd\u8dd1\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b2c\u4e8c\u5c42\uff1aspring-base\uff08\u6865\u6881\uff09<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5b9a\u4f4d<\/strong>\uff1a\u9002\u914d Spring Framework\uff08\u4e5f\u5c31\u662f Spring \u7684\u6838\u5fc3 IoC \u5bb9\u5668\uff09\uff0c\u4f46\u4e0d\u4f9d\u8d56 Spring Boot\u3002<\/li>\n\n\n\n<li><strong>\u4e3a\u4ec0\u4e48<\/strong>\uff1aSpring \u548c Spring Boot \u662f\u4e24\u7801\u4e8b\u3002\n<ul class=\"wp-block-list\">\n<li>\u5f88\u591a\u9057\u7559\u7cfb\u7edf\u662f Spring 4.x \u6216 5.x\uff0c\u4f46\u6ca1\u6709\u7528 Boot\u3002<\/li>\n\n\n\n<li>\u8fd9\u4e00\u5c42\u8d1f\u8d23\u628a\u00a0core\u00a0\u91cc\u7684 Java \u5bf9\u8c61\u53d8\u6210 Spring Bean\uff0c\u5229\u7528\u00a0ApplicationContext\u00a0\u53d1\u6325\u4f5c\u7528\u3002<\/li>\n\n\n\n<li><strong>\u4ef7\u503c<\/strong>\uff1a\u517c\u5bb9\u4e86\u201c\u65e7\u65f6\u4ee3\u7684\u738b\u201d\u2014\u2014\u4f20\u7edf\u7684 Spring MVC \u9879\u76ee\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b2c\u4e09\u5c42\uff1astarter\uff08\u8584\u76ae\/\u80f6\u6c34\uff09<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5b9a\u4f4d<\/strong>\uff1a<strong>\u6781\u8584<\/strong>\u7684\u81ea\u52a8\u88c5\u914d\u5c42\u3002<\/li>\n\n\n\n<li><strong>\u4e3a\u4ec0\u4e48<\/strong>\uff1a\u8fd9\u91cc\u9762\u51e0\u4e4e\u6ca1\u6709\u4e1a\u52a1\u903b\u8f91\uff0c\u53ea\u6709\u00a0META-INF\/spring.factories\u00a0\u548c\u4e00\u5806\u00a0@ConditionalOnXxx\u3002\n<ul class=\"wp-block-list\">\n<li>\u5b83\u7684\u4f5c\u7528\u4ec5\u4ec5\u662f\uff1a<strong>\u201c\u5982\u679c\u4f60\u5f15\u5165\u4e86 Nacos\uff0c\u6211\u5c31\u5e2e\u4f60\u628a Nacos \u7684\u9002\u914d\u5668\u521d\u59cb\u5316\uff1b\u5982\u679c\u4f60\u6ca1\u5f15\u5165\uff0c\u6211\u5c31\u4e0d\u52a8\u3002\u201d<\/strong><\/li>\n\n\n\n<li><strong>\u4ef7\u503c<\/strong>\uff1a<strong>\u7528\u6237\u4f53\u9a8c<\/strong>\u3002Boot \u7528\u6237\u5f15\u5165\u5b83\uff0c\u4e00\u884c\u4ee3\u7801\u4e0d\u7528\u5199\u5c31\u80fd\u8dd1\uff0c\u4f46\u5b83\u5e95\u5c42\u8c03\u7528\u7684\u8fd8\u662f\u00a0core\u00a0\u548c\u00a0spring-base\u00a0\u7684\u80fd\u529b\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b2c\u56db\u5c42\uff1aadapter\uff08\u63d2\u4ef6\u5316\uff09<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5b9a\u4f4d<\/strong>\uff1aapollo-starter\u3001nacos-starter\u3002<\/li>\n\n\n\n<li><strong>\u4e3a\u4ec0\u4e48<\/strong>\uff1a\u907f\u514d<strong>\u4f9d\u8d56\u81a8\u80c0\uff08Bloatware\uff09<\/strong>\u3002\n<ul class=\"wp-block-list\">\n<li>\u5982\u679c\u4e0d\u62c6\u5206\uff0c\u4e00\u4e2a Starter \u91cc\u65e2\u6709 Nacos \u7684 jar \u5305\uff0c\u53c8\u6709 Apollo \u7684 jar \u5305\u3002\u7528\u6237\u660e\u660e\u53ea\u7528 Nacos\uff0c\u7ed3\u679c\u6253\u5305\u65f6\u83ab\u540d\u5176\u5999\u591a\u4e86\u4e00\u5806 Apollo \u7684\u5e9f\u6599\uff0c\u751a\u81f3\u53ef\u80fd\u5bfc\u81f4 jar \u5305\u51b2\u7a81\uff08Dependency Hell\uff09\u3002<\/li>\n\n\n\n<li><strong>\u4ef7\u503c<\/strong>\uff1a<strong>\u6309\u9700\u52a0\u8f7d<\/strong>\u3002\u6211\u60f3\u5403\u5ddd\u83dc\u5c31\u8fdb\u5ddd\u83dc\u9986\uff08Nacos\uff09\uff0c\u60f3\u5403\u7ca4\u83dc\u5c31\u8fdb\u7ca4\u83dc\u9986\uff08Apollo\uff09\uff0c\u4e0d\u8981\u7ed9\u6211\u7aef\u4e00\u9505\u5927\u6742\u70e9\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Boot 1.5 \u2192 2.x \u2192 3.x\uff0c\u6bcf\u6b21 API \u90fd\u5927\u6539<\/strong>Spring Boot 2.x \u5347\u7ea7\u5230 3.x\uff08JDK 17\u5f3a\u5236\uff0cjavax \u53d8 jakarta\uff09\u3002<strong>\u5927 Starter \u7684\u4e0b\u573a<\/strong>\u662f\u5982\u679c\u4f60\u7684\u6838\u5fc3\u4e1a\u52a1\u903b\u8f91\u4ee3\u7801\u548c Starter \u7684\u81ea\u52a8\u88c5\u914d\u4ee3\u7801\u6df7\u5728\u4e00\u8d77\u3002\u4f60\u9700\u8981\u4e3a\u4e86\u9002\u914d Spring Boot 3 \u628a\u6574\u4e2a\u9879\u76ee\u7ffb\u4fee\u4e00\u904d\uff0c\u7ef4\u62a4\u4e24\u5957\u4ee3\u7801\u3002<\/p>\n\n\n\n<p>\u5148\u8bf4\u8bf4\u9879\u76ee\u7ea7\u4ee3\u7801\uff0c\u6bd4\u5982\u516c\u53f8\u5185\u90e8\u81ea\u5df1\u505a\u7684 Starter \u5427\uff0c\u8fd9\u79cd\u4e1c\u897f\u7684\u4f7f\u7528\u73af\u5883\u662f\u56fa\u5b9a\u7684 \u2014\u2014 \u516c\u53f8\u7edf\u4e00\u7528 Spring Boot 2.7\uff0c\u4e5f\u7edf\u4e00\u7528 Nacos\uff0c\u6240\u4ee5\u5b8c\u5168\u53ef\u4ee5\u600e\u4e48\u723d\u600e\u4e48\u6765\uff1a\u76f4\u63a5\u6253\u6210\u4e00\u4e2a\u5305\uff0c\u628a\u6240\u6709\u4f9d\u8d56\u90fd\u4e00\u80a1\u8111\u585e\u8fdb\u53bb\uff0c\u53ea\u8981\u5927\u5bb6\u7528\u7740\u65b9\u4fbf\u5c31\u884c\u3002<\/p>\n\n\n\n<p>\u4f46\u4ea7\u54c1\u7ea7\u7ec4\u4ef6\u5c31\u4e0d\u4e00\u6837\u4e86\uff0c\u6bd4\u5982\u5f00\u6e90\u7684\u7ec4\u4ef6\u6216\u8005 oneThread \u8fd9\u7c7b\uff0c\u9762\u5bf9\u7684\u4f7f\u7528\u73af\u5883\u6839\u672c\u6ca1\u4e2a\u51c6\u513f \u2014\u2014 \u6709\u4eba\u8fd8\u5728\u7528 Spring Boot 1.5\uff0c\u6709\u4eba\u5df2\u7ecf\u66f4\u5230 3.0 \u4e86\uff1b\u6709\u4eba\u7528 Apollo \u505a\u914d\u7f6e\u4e2d\u5fc3\uff0c\u6709\u4eba\u5374\u7528 Zookeeper\u3002<\/p>\n\n\n\n<p>\u8fd9\u4e8b\u513f\u5176\u5b9e\u8ddf conda \u5305\u4e5f\u633a\u50cf\u7684\uff0c\u5404\u79cd\u5305\u7528\u7740\u7528\u7740\u603b\u4f1a\u51fa\u4e9b\u5947\u5947\u602a\u602a\u7684\u5e7a\u86fe\u5b50\uff0c\u6700\u540e\u903c\u5f97\u4f60\u4e0d\u5f97\u4e0d\u4e13\u95e8\u641e\u4e2a\u7279\u5b9a\u7248\u672c\u51fa\u6765\u624d\u884c\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u81ea\u5b9a\u4e49\u52a8\u6001\u7ebf\u7a0b\u6c60\u57fa\u7840\u7c7b<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1.core\u6838\u5fc3\u8bbe\u8ba1\u6982\u89c8<\/h2>\n\n\n\n<p>core\u670d\u52a1\u7684\u6838\u5fc3\u5c31\u662f\u5c3d\u53ef\u80fd\u51cf\u5c11\u5bf9\u4e09\u65b9\u6846\u67b6\u7684\u4f9d\u8d56 \u3002<\/p>\n\n\n\n<p>\u8be5\u6a21\u5757\u4e3b\u8981\u627f\u62c5\u4ee5\u4e0b\u6838\u5fc3\u804c\u8d23\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9a\u4e49\u52a8\u6001\u7ebf\u7a0b\u6c60\u7684\u57fa\u7840\u62bd\u8c61\u7c7b\uff1b<\/li>\n\n\n\n<li>\u6267\u884c\u7ebf\u7a0b\u6c60\u8fd0\u884c\u65f6\u7684\u544a\u8b66\u626b\u63cf\u903b\u8f91\uff1b<\/li>\n\n\n\n<li>\u63d0\u4f9b\u7ebf\u7a0b\u6c60\u8fd0\u884c\u72b6\u6001\u7684\u6307\u6807\u91c7\u96c6\u80fd\u529b\uff1b<\/li>\n\n\n\n<li>\u652f\u6301\u76d1\u542c\u914d\u7f6e\u4e2d\u5fc3\u53d8\u66f4\uff0c\u5e76\u52a8\u6001\u8c03\u6574\u7ebf\u7a0b\u6c60\u53c2\u6570\u53ca\u89e6\u53d1\u544a\u8b66\u901a\u77e5\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. package \u8bf4\u660e<\/h2>\n\n\n\n<p>\u672c\u6587\u5c06\u8fdb\u4e00\u6b65\u8bf4\u660e <code>onethread-core<\/code> \u6a21\u5757\u4e2d\u5404\u4e2a\u5305\u7684\u5177\u4f53\u4f5c\u7528\uff0c\u5e2e\u52a9\u5927\u5bb6\u66f4\u6e05\u6670\u5730\u7406\u89e3\u5176\u5185\u90e8\u7ed3\u6784\u4e0e\u8bbe\u8ba1\u610f\u56fe\u3002<\/p>\n\n\n\n<p>\u5177\u4f53\u5305\u5212\u5206\u4e0e\u529f\u80fd\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\n\u251c\u2500\u2500 src\n\u2502   \u251c\u2500\u2500 main\n\u2502   \u2502   \u2514\u2500\u2500 java\n\u2502   \u2502       \u2514\u2500\u2500 com\n\u2502   \u2502           \u2514\u2500\u2500 nageoffer\n\u2502   \u2502               \u2514\u2500\u2500 onethread\n\u2502   \u2502                   \u2514\u2500\u2500 core\n\u2502   \u2502                       \u251c\u2500\u2500 alarm # \u544a\u8b66\u626b\u63cf\n\u2502   \u2502                       \u251c\u2500\u2500 config # \u7ec4\u4ef6\u5e93\u57fa\u7840\u914d\u7f6e\n\u2502   \u2502                       \u251c\u2500\u2500 constant # \u5e38\u91cf\u7c7b\n\u2502   \u2502                       \u251c\u2500\u2500 executor # \u6700\u6700\u6838\u5fc3\u7684\u7ebf\u7a0b\u6c60\u57fa\u7840\u5305\n\u2502   \u2502                       \u2502   \u2514\u2500\u2500 support # \u6838\u5fc3\u57fa\u7840\u5305\u81f3\u4e0a\u589e\u5f3a\u7684\u529f\u80fd\uff0c\u5982\u679c\u4e0d\u62c6\u5206\u8fd9\u4e2a\u4e5f\u884c\uff0c\u4f46\u662f\u7c7b\u4f1a\u6bd4\u8f83\u591a\n\u2502   \u2502                       \u251c\u2500\u2500 monitor # \u8fd0\u884c\u65f6\u6307\u6807\u76d1\u63a7\n\u2502   \u2502                       \u251c\u2500\u2500 notification # \u7ebf\u7a0b\u6c60\u914d\u7f6e\u53d8\u66f4\u548c\u544a\u8b66\u901a\u77e5\n\u2502   \u2502                       \u2502   \u251c\u2500\u2500 dto\n\u2502   \u2502                       \u2502   \u2514\u2500\u2500 service\n\u2502   \u2502                       \u251c\u2500\u2500 parser # \u89e3\u6790\u914d\u7f6e\u5185\u5bb9\u5b57\u7b26\u4e32\u4e3a\u952e\u503c\u5bf9 Map\n\u2502   \u2502                       \u2514\u2500\u2500 toolkit # \u5de5\u5177\u5305\uff0c\u6bd4\u5982\uff1a\u7ebf\u7a0b\u6c60\u548c\u7ebf\u7a0b\u5de5\u5382\u6784\u5efa\u8005\n\u5927\u5bb6\u6700\u9700\u8981\u5173\u6ce8\u7684\u662f alarm\u3001executor\u3001monitor\u3001notification \u56db\u4e2a\u5305\u3002<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?>\n&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n         xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\">\n    &lt;modelVersion>4.0.0&lt;\/modelVersion>\n    &lt;parent>\n        &lt;groupId>com.nageoffer.onethread&lt;\/groupId>\n        &lt;artifactId>onethread-all&lt;\/artifactId>\n        &lt;version>0.0.1-SNAPSHOT&lt;\/version>\n    &lt;\/parent>\n    &lt;artifactId>onethread-core&lt;\/artifactId>\n\n    &lt;dependencies>\n        &lt;dependency>\n            &lt;groupId>cn.hutool&lt;\/groupId>\n            &lt;artifactId>hutool-all&lt;\/artifactId>\n        &lt;\/dependency>\n\n        &lt;dependency>\n            &lt;groupId>com.alibaba.fastjson2&lt;\/groupId>\n            &lt;artifactId>fastjson2&lt;\/artifactId>\n        &lt;\/dependency>\n\n        &lt;dependency>\n            &lt;groupId>org.yaml&lt;\/groupId>\n            &lt;artifactId>snakeyaml&lt;\/artifactId>\n        &lt;\/dependency>\n\n        &lt;dependency>\n            &lt;groupId>org.springframework.boot&lt;\/groupId>\n            &lt;artifactId>spring-boot-starter-test&lt;\/artifactId>\n            &lt;scope>test&lt;\/scope>\n        &lt;\/dependency>\n      \n        &lt;dependency>\n            &lt;groupId>ch.qos.logback&lt;\/groupId>\n            &lt;artifactId>logback-classic&lt;\/artifactId>\n        &lt;\/dependency>\n\n        &lt;dependency>\n            &lt;groupId>io.micrometer&lt;\/groupId>\n            &lt;artifactId>micrometer-core&lt;\/artifactId>\n        &lt;\/dependency>\n    &lt;\/dependencies>\n&lt;\/project><\/code><\/pre>\n\n\n\n<p>\u5728\u9879\u76ee\u7684\u6839\u76ee\u5f55\uff08\u901a\u5e38\u662f <code>parent<\/code> \u9879\u76ee\u7684 <code>pom.xml<\/code>\uff09\u4e2d\uff0c\u5df2\u7ecf\u901a\u8fc7 <code>&lt;dependencyManagement><\/code> \u7edf\u4e00\u5b9a\u4e49\u4e86\u5404\u4f9d\u8d56\u7684\u7248\u672c\u53f7<\/p>\n\n\n\n<p>\u5728 <code>core<\/code> \u5305\u4e2d\uff0c\u6709\u56db\u4e2a\u6700\u6838\u5fc3\u7684\u7c7b\uff0c\u5b83\u4eec\u6784\u6210\u4e86\u6574\u4e2a\u52a8\u6001\u7ebf\u7a0b\u6c60\u529f\u80fd\u7684\u57fa\u7840\u3002\u5176\u5173\u7cfb\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/article-images.zsxq.com\/FkqM-rk3f8UxBzTRHg1YzyUgfMrb\" alt=\"iShot_2025-06-26_20.53.54.png\" title=\"iShot_2025-06-26_20.53.54.png\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u5173\u952e\u7c7b\u8be6\u89e3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-one-thread-executor\">1. OneThreadExecutor<\/h3>\n\n\n\n<p>\u6709\u540c\u5b66\u53ef\u80fd\u4f1a\u95ee\uff1a<strong>\u4e3a\u4ec0\u4e48\u8981\u5355\u72ec\u5b9a\u4e49\u4e00\u4e2a\u7ebf\u7a0b\u6c60\u57fa\u7c7b\uff0c\u800c\u4e0d\u662f\u76f4\u63a5\u4f7f\u7528\u539f\u751f\u7684<code>ThreadPoolExecutor<\/code>\u5462\uff1f<\/strong><\/p>\n\n\n\n<p>\u539f\u56e0\u6709\u5f88\u591a\uff0c\u4f46\u4e3a\u4e86\u5faa\u5e8f\u6e10\u8fdb\u5730\u5c55\u5f00\u8bf4\u660e\uff0c\u8fd9\u91cc\u5148\u8bb2\u5176\u4e2d\u4e00\u4e2a\u6700\u5173\u952e\u7684\u70b9\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u539f\u751f\u7ebf\u7a0b\u6c60\u5e76\u6ca1\u6709\u7ebf\u7a0b\u6c60 ID \u6216\u540d\u79f0\u7684\u6982\u5ff5\u3002<\/p>\n<\/blockquote>\n\n\n\n<p>\u5728\u5b9e\u9645\u4e1a\u52a1\u4e2d\uff0c\u6211\u4eec\u5f80\u5f80\u9700\u8981\u5bf9\u7ebf\u7a0b\u6c60\u8fdb\u884c\u8fd0\u884c\u65f6\u53d8\u66f4\u3001\u6307\u6807\u76d1\u63a7\u3001\u544a\u8b66\u901a\u77e5\u7b49\u64cd\u4f5c\u3002\u800c\u7f3a\u4e4f\u552f\u4e00\u6807\u8bc6\uff0c\u4f1a\u8ba9\u6211\u4eec\u5728\u9762\u5bf9\u591a\u4e2a\u7ebf\u7a0b\u6c60\u65f6\u96be\u4ee5\u51c6\u786e\u5b9a\u4f4d\u3001\u8bc6\u522b\u548c\u7ba1\u7406\u3002<\/p>\n\n\n\n<p>\u56e0\u6b64\uff0c\u4e3a\u4e86\u652f\u6301\u66f4\u5f3a\u7684\u53ef\u89c2\u6d4b\u6027\u4e0e\u53ef\u8fd0\u7ef4\u6027\uff0c\u6211\u4eec\u62bd\u8c61\u51fa\u4e86\u5177\u5907\u7ebf\u7a0b\u6c60\u6807\u8bc6\u80fd\u529b\u7684\u57fa\u7c7b\uff0c\u4f5c\u4e3a\u540e\u7eed\u6269\u5c55\u7684\u7edf\u4e00\u5165\u53e3\u3002<\/p>\n\n\n\n<p>\u503c\u5f97\u4e00\u63d0\u7684\u662f\uff0c<code>ThreadPoolExecutor<\/code> \u672c\u8eab\u5e76\u4e0d\u6392\u65a5\u7ee7\u627f\uff0c\u53cd\u800c\u5728\u8bbe\u8ba1\u4e0a\u4e3a\u7ee7\u627f\u6269\u5c55\u9884\u7559\u4e86\u51e0\u4e2a\u5173\u952e\u7684\u6269\u5c55\u70b9\u65b9\u6cd5\u3002\u901a\u8fc7\u7ee7\u627f\u5e76\u91cd\u5199\u8fd9\u4e9b\u65b9\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u8f7b\u677e\u6ce8\u5165\u81ea\u5b9a\u4e49\u884c\u4e3a\uff0c\u6784\u5efa\u66f4\u667a\u80fd\u7684\u7ebf\u7a0b\u6c60\u4f53\u7cfb\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * \u4efb\u52a1\u6267\u884c\u524d\u94a9\u5b50\uff08\u53ef\u7528\u4e8e\u8bb0\u5f55\u5f00\u59cb\u65f6\u95f4\u3001\u8bbe\u7f6e\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u7b49\uff09\n *\/\n@Override\nprotected void beforeExecute(Thread t, Runnable r) {\n    super.beforeExecute(t, r);\n    \/\/ \u81ea\u5b9a\u4e49\u903b\u8f91\n}\n\u200b\n\/**\n * \u4efb\u52a1\u6267\u884c\u540e\u94a9\u5b50\uff08\u53ef\u7528\u4e8e\u7edf\u8ba1\u6267\u884c\u8017\u65f6\u3001\u6e05\u7406\u8d44\u6e90\u3001\u65e5\u5fd7\u8bb0\u5f55\u7b49\uff09\n *\/\n@Override\nprotected void afterExecute(Runnable r, Throwable t) {\n    super.afterExecute(r, t);\n    \/\/ \u81ea\u5b9a\u4e49\u903b\u8f91\n}\n\u200b\n\/**\n * \u7ebf\u7a0b\u6c60\u7ec8\u6b62\u94a9\u5b50\uff08\u53ef\u7528\u4e8e\u6e05\u7406\u8d44\u6e90\u3001\u53d1\u9001\u901a\u77e5\u7b49\uff09\n *\/\n@Override\nprotected void terminated() {\n    super.terminated();\n    \/\/ \u81ea\u5b9a\u4e49\u903b\u8f91\n}\n\u200b<\/code><\/pre>\n\n\n\n<p>\u4e0b\u9762\u662f <code>oneThread<\/code> \u7684\u7ebf\u7a0b\u6c60\u57fa\u7c7b\uff0c\u76ee\u524d\u6211\u4eec\u53ea\u5728\u5176\u4e2d<strong>\u96c6\u6210\u4e86\u7ebf\u7a0b\u6c60\u552f\u4e00\u6807\u8bc6<\/strong> \u8fd9\u4e00\u6838\u5fc3\u80fd\u529b\u3002<\/p>\n\n\n\n<p>\u5728\u9605\u8bfb\u6e90\u7801\u65f6\uff0c\u5efa\u8bae\u5927\u5bb6\u6682\u65f6\u805a\u7126\u8fd9\u4e00\u529f\u80fd\u70b9\u3002\u81f3\u4e8e\u7c7b\u4e2d\u5176\u4ed6\u76f8\u5bf9\u590d\u6742\u7684\u903b\u8f91\uff0c\u5982\u679c\u4e00\u65f6\u770b\u4e0d\u592a\u61c2\u4e5f\u6ca1\u5173\u7cfb\uff0c<strong>\u4e0e\u5176\u9677\u5165\u7ec6\u8282\uff0c\u4e0d\u5982\u5148\u8ddf\u7740\u9a6c\u54e5\u4e00\u8d77\u6309\u201c\u4e3b\u7ebf\u601d\u8def\u201d\u4e00\u6b65\u6b65\u6df1\u5165\u7406\u89e3\u3002<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * \u589e\u5f3a\u7684\u52a8\u6001\u3001\u62a5\u8b66\u548c\u53d7\u76d1\u63a7\u7684\u7ebf\u7a0b\u6c60 oneThread\n * &lt;p>\n * \u4f5c\u8005\uff1a\u9a6c\u4e01\n * \u52a0\u9879\u76ee\u7fa4\uff1a\u65e9\u52a0\u5165\u5c31\u662f\u4f18\u52bf\uff01500\u4eba\u5185\u90e8\u9879\u76ee\u7fa4\uff0c\u5206\u4eab\u7684\u77e5\u8bc6\u603b\u6709\u4f60\u9700\u8981\u7684 &lt;a href=\"https:\/\/t.zsxq.com\/cw7b9\" \/>\n * \u5f00\u53d1\u65f6\u95f4\uff1a2025-04-20\n *\/\n@Slf4j\npublic class OneThreadExecutor extends ThreadPoolExecutor {\n\u200b\n    \/**\n     * \u7ebf\u7a0b\u6c60\u552f\u4e00\u6807\u8bc6\uff0c\u7528\u6765\u52a8\u6001\u53d8\u66f4\u53c2\u6570\u7b49\n     *\/\n    @Getter\n    private final String threadPoolId;\n    \/\/ ......\n\u200b\n    \/**\n     * Creates a new {@code ExtensibleThreadPoolExecutor} with the given initial parameters.\n     *\n     * @param threadPoolId           thread-pool id\n     * @param corePoolSize           the number of threads to keep in the pool, even\n     *                               if they are idle, unless {@code allowCoreThreadTimeOut} is set\n     * @param maximumPoolSize        the maximum number of threads to allow in the\n     *                               pool\n     * @param keepAliveTime          when the number of threads is greater than\n     *                               the core, this is the maximum time that excess idle threads\n     *                               will wait for new tasks before terminating.\n     * @param unit                   the time unit for the {@code keepAliveTime} argument\n     * @param workQueue              the queue to use for holding tasks before they are\n     *                               executed.  This queue will hold only the {@code Runnable}\n     *                               tasks submitted by the {@code execute} method.\n     * @param threadFactory          the factory to use when the executor\n     *                               creates a new thread\n     * @param handler                the handler to use when execution is blocked\n     *                               because the thread bounds and queue capacities are reached\n     * @param awaitTerminationMillis the maximum time to wait\n     * @throws IllegalArgumentException if one of the following holds:&lt;br>\n     *                                  {@code corePoolSize &lt; 0}&lt;br>\n     *                                  {@code keepAliveTime &lt; 0}&lt;br>\n     *                                  {@code maximumPoolSize &lt;= 0}&lt;br>\n     *                                  {@code maximumPoolSize &lt; corePoolSize}\n     * @throws NullPointerException     if {@code workQueue} or {@code unit}\n     *                                  or {@code threadFactory} or {@code handler} is null\n     *\/\n    public OneThreadExecutor(\n            @NonNull String threadPoolId,\n            int corePoolSize,\n            int maximumPoolSize,\n            long keepAliveTime,\n            @NonNull TimeUnit unit,\n            @NonNull BlockingQueue&lt;Runnable> workQueue,\n            @NonNull ThreadFactory threadFactory,\n            @NonNull RejectedExecutionHandler handler,\n            long awaitTerminationMillis) {\n        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler);\n        \/\/ ......\n        \/\/ \u8bbe\u7f6e\u52a8\u6001\u7ebf\u7a0b\u6c60\u6269\u5c55\u5c5e\u6027\uff1a\u7ebf\u7a0b\u6c60 ID \u6807\u8bc6\n        this.threadPoolId = threadPoolId;\n        \/\/ ......\n    }\n\u200b\n    \/\/ ......\n}\n<\/code><\/pre>\n\n\n\n<p>JDK \u7684\u539f\u751f\u7ebf\u7a0b\u6c60\u5c31\u50cf\u662f<strong>\u5916\u5305\u56e2\u961f<\/strong>\uff0c\u867d\u7136\u80fd\u5e72\u6d3b\uff0c\u4f46\u662f\u6ca1\u6709\u7f16\u5236\uff0c\u6ca1\u6709\u540d\u5b57\u3002\u51fa\u4e86\u95ee\u9898\uff08\u6bd4\u5982 CPU \u98d9\u9ad8\uff09\uff0c\u4f60\u53ea\u77e5\u9053\u662f\u201c\u67d0\u4e2a\u7ebf\u7a0b\u6c60\u201d\u5e72\u7684\uff0c\u4f46\u4e0d\u77e5\u9053\u5177\u4f53\u662f\u54ea\u4e00\u4e2a\u3002OneThreadExecutor\u00a0\u7ee7\u627f\u4e86 JDK \u7ebf\u7a0b\u6c60\uff0c\u4f46\u5b83\u6700\u5927\u7684\u5347\u7ea7\u662f<strong>\u6302\u4e86\u5de5\u724c\uff08threadPoolId\uff09<\/strong>\u3002\u5b83\u4e0d\u4ec5\u80fd\u5e72\u6d3b\uff08execute\u00a0\u4efb\u52a1\uff09\uff0c\u8fd8\u80fd\u968f\u65f6\u88ab\u7cfb\u7edf\u8bc6\u522b\uff08\u901a\u8fc7\u00a0getThreadPoolId\uff09\u3002<\/p>\n\n\n\n<p>\u5b83\u662f\u52a8\u6001\u8c03\u6574\u7684\u57fa\u7840\uff0c\u56e0\u4e3a\u53ea\u6709\u7ed9\u5b83\u8d77\u4e86\u540d\u5b57\uff0c\u6211\u4eec\u624d\u80fd\u6307\u5b9a\u8bf4\uff1a\u201c\u628a<strong>\u8ba2\u5355\u4e1a\u52a1\u7ebf\u7a0b\u6c60<\/strong>\u7684\u6838\u5fc3\u7ebf\u7a0b\u6570\u4ece 10 \u6539\u6210 20\u201d\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-thread-pool-executor-properties\">2. ThreadPoolExecutorProperties<\/h3>\n\n\n\n<p>\u6709\u540c\u5b66\u53ef\u80fd\u4f1a\u95ee\uff1a<strong>\u7ebf\u7a0b\u6c60\u7684\u53c2\u6570\u660e\u660e\u5df2\u7ecf\u5728<code>OneThreadExecutor<\/code>\u4e2d\u5b9a\u4e49\u4e86\uff0c\u4e3a\u4ec0\u4e48\u8fd8\u8981\u5355\u72ec\u62c6\u5206\u51fa\u4e00\u4e2a\u5c5e\u6027\u5b9e\u4f53\u7c7b\uff1f<\/strong><\/p>\n\n\n\n<p>\u8fd9\u662f\u56e0\u4e3a\u7ebf\u7a0b\u6c60\u4e2d\u7684\u53c2\u6570\u901a\u5e38<strong>\u5206\u6563\u5728\u591a\u4e2a\u5b57\u6bb5\u4e2d<\/strong> \uff0c\u5e76\u4e14\u50cf<strong>\u544a\u8b66\u9608\u503c\u3001\u901a\u77e5\u89c4\u5219\u7b49\u914d\u7f6e<\/strong> \u5728\u539f\u751f\u7ebf\u7a0b\u6c60\u4e2d\u662f\u6839\u672c\u4e0d\u5b58\u5728\u7684\u3002\u4e3a\u4e86\u66f4\u597d\u5730\u652f\u6301\u52a8\u6001\u914d\u7f6e\u548c\u7edf\u4e00\u7ba1\u7406\uff0c\u6211\u4eec\u901a\u8fc7 <code>threadPoolId<\/code> \u5c06\u8fd9\u4e9b\u201c\u5916\u56f4\u53c2\u6570\u201d\u4e0e\u7ebf\u7a0b\u6c60\u8fdb\u884c\u5173\u8054\uff0c\u5f62\u6210\u4e00\u5957\u5b8c\u6574\u7684\u914d\u7f6e\u4f53\u7cfb\uff0c\u4fbf\u4e8e\u5728\u8fd0\u884c\u65f6\u67e5\u770b\u3001\u5b58\u50a8\u3001\u53d8\u66f4\u548c\u8ffd\u8e2a\u3002<\/p>\n\n\n\n<p>\u53e6\u5916\uff0c\u4e3a\u4e86\u9a6c\u54e5\u5199\u4ee3\u7801\u65b9\u4fbf\uff0c\u544a\u8b66\u548c\u901a\u77e5\u76f8\u5173\u7684\u53c2\u6570\u7c7b\u76ee\u524d\u662f\u4ee5<strong>\u9759\u6001\u5185\u90e8\u7c7b<\/strong> \u7684\u5f62\u5f0f\u5b58\u5728\u3002\u5927\u5bb6\u5728\u5b9e\u9645\u5f00\u53d1\u4e2d\uff0c\u4e5f\u53ef\u4ee5\u6839\u636e\u9700\u8981\u5c06\u5176<strong>\u62c6\u5206\u4e3a\u72ec\u7acb\u7684\u5916\u90e8\u7c7b<\/strong> \uff0c\u4ee5\u63d0\u5347\u53ef\u590d\u7528\u6027\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b83\u548c\u00a0OneThreadExecutor\u00a0\u7684\u5173\u7cfb\u662f\u00a0<strong>\u201c\u7406\u60f3 vs \u73b0\u5b9e\u201d<\/strong>\u3002<\/li>\n\n\n\n<li>Properties\u00a0\u8bb0\u5f55\u7684\u662f\uff1a\u201c\u8001\u677f\u5e0c\u671b\u8fd9\u4e2a\u90e8\u95e8\u6709\u591a\u5c11\u4eba\u201d\uff1b<\/li>\n\n\n\n<li>Executor\u00a0\u8bb0\u5f55\u7684\u662f\uff1a\u201c\u76ee\u524d\u5b9e\u9645\u4e0a\u6709\u591a\u5c11\u4eba\u5728\u5e72\u6d3b\u201d\u3002<\/li>\n\n\n\n<li>\u52a8\u6001\u8c03\u6574\u7684\u8fc7\u7a0b\uff0c\u5c31\u662f\u628a\u00a0Properties\u00a0\u91cc\u7684\u65b0\u503c\u5e94\u7528\u5230\u00a0Executor\u00a0\u91cc\u7684\u8fc7\u7a0b\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * \u7ebf\u7a0b\u6c60\u5c5e\u6027\u53c2\u6570\n * &lt;p>\n * \u4f5c\u8005\uff1a\u9a6c\u4e01\n * \u52a0\u9879\u76ee\u7fa4\uff1a\u65e9\u52a0\u5165\u5c31\u662f\u4f18\u52bf\uff01500\u4eba\u5185\u90e8\u9879\u76ee\u7fa4\uff0c\u5206\u4eab\u7684\u77e5\u8bc6\u603b\u6709\u4f60\u9700\u8981\u7684 &lt;a href=\"https:\/\/t.zsxq.com\/cw7b9\" \/>\n * \u5f00\u53d1\u65f6\u95f4\uff1a2025-04-20\n *\/\n@Data\n@Builder\n@NoArgsConstructor\n@AllArgsConstructor\n@Accessors(chain = true)\npublic class ThreadPoolExecutorProperties {\n\u200b\n    \/**\n     * \u7ebf\u7a0b\u6c60\u552f\u4e00\u6807\u8bc6\n     *\/\n    private String threadPoolId;\n\u200b\n    \/**\n     * \u6838\u5fc3\u7ebf\u7a0b\u6570\n     *\/\n    private Integer corePoolSize;\n\u200b\n    \/**\n     * \u6700\u5927\u7ebf\u7a0b\u6570\n     *\/\n    private Integer maximumPoolSize;\n\u200b\n    \/**\n     * \u961f\u5217\u5bb9\u91cf\n     *\/\n    private Integer queueCapacity;\n\u200b\n    \/**\n     * \u963b\u585e\u961f\u5217\u7c7b\u578b\n     *\/\n    private String workQueue;\n\u200b\n    \/**\n     * \u62d2\u7edd\u7b56\u7565\u7c7b\u578b\n     *\/\n    private String rejectedHandler;\n\u200b\n    \/**\n     * \u7ebf\u7a0b\u7a7a\u95f2\u5b58\u6d3b\u65f6\u95f4\uff08\u5355\u4f4d\uff1a\u79d2\uff09\n     *\/\n    private Long keepAliveTime;\n\u200b\n    \/**\n     * \u662f\u5426\u5141\u8bb8\u6838\u5fc3\u7ebf\u7a0b\u8d85\u65f6\n     *\/\n    private Boolean allowCoreThreadTimeOut;\n\u200b\n    \/**\n     * \u901a\u77e5\u914d\u7f6e\n     *\/\n    private NotifyConfig notify;\n\u200b\n    \/**\n     * \u62a5\u8b66\u914d\u7f6e\uff0c\u9ed8\u8ba4\u8bbe\u7f6e\n     *\/\n    private AlarmConfig alarm = new AlarmConfig();\n\u200b\n    @Data\n    @NoArgsConstructor\n    @AllArgsConstructor\n    public static class NotifyConfig {\n\u200b\n        \/**\n         * \u63a5\u6536\u4eba\u96c6\u5408\n         *\/\n        private String receives;\n\u200b\n        \/**\n         * \u544a\u8b66\u95f4\u9694\uff0c\u5355\u4f4d\u5206\u949f\n         *\/\n        private Integer interval = 5;\n    }\n\u200b\n    @Data\n    @NoArgsConstructor\n    @AllArgsConstructor\n    public static class AlarmConfig {\n\u200b\n        \/**\n         * \u9ed8\u8ba4\u5f00\u542f\u62a5\u8b66\u914d\u914d\u7f6e\n         *\/\n        private Boolean enable = Boolean.TRUE;\n\u200b\n        \/**\n         * \u961f\u5217\u9608\u503c\n         *\/\n        private Integer queueThreshold = 80;\n\u200b\n        \/**\n         * \u6d3b\u8dc3\u7ebf\u7a0b\u9608\u503c\n         *\/\n        private Integer activeThreshold = 80;\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-thread-pool-executor-holder\">3. ThreadPoolExecutorHolder<\/h3>\n\n\n\n<p>\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\u5bf9\u8c61\u548c\u7ebf\u7a0b\u6c60\u53c2\u6570\u914d\u7f6e\u5bf9\u8c61\u672c\u8d28\u4e0a\u662f\u4e24\u4e2a\u72ec\u7acb\u7684\u5b9e\u4f53\u3002\u4f46\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\uff0c\u6211\u4eec\u5f80\u5f80\u9700\u8981<strong>\u540c\u65f6\u64cd\u4f5c\u8fd9\u4e24\u90e8\u5206\u4fe1\u606f<\/strong> \uff0c\u4f8b\u5982\u5728\u6267\u884c\u52a8\u6001\u53d8\u66f4\u3001\u72b6\u6001\u76d1\u63a7\u6216\u544a\u8b66\u5904\u7406\u65f6\u3002<\/p>\n\n\n\n<p>\u4e3a\u6b64\uff0c\u6211\u4eec\u5f15\u5165\u4e86 <code>Holder<\/code> \u7684\u8bbe\u8ba1\u601d\u8def\uff0c\u5c06\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\u4e0e\u5176\u5bf9\u5e94\u7684\u5c5e\u6027\u914d\u7f6e\uff0c\u901a\u8fc7 <code>threadPoolId<\/code> \u8fdb\u884c\u7ed1\u5b9a\u548c\u805a\u5408\uff0c\u5c01\u88c5\u6210\u4e00\u4e2a\u7edf\u4e00\u7684\u7ed3\u6784\uff0c\u4fbf\u4e8e\u540e\u7eed\u7edf\u4e00\u7ba1\u7406\u4e0e\u8bbf\u95ee\u3002\u5728\u4ee3\u7801\u4f20\u9012\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u6211\u4eec\u8981\u53bb\u7ba1\u7406\u4e00\u4e2a\u7ebf\u7a0b\u6c60\uff0c\u6211\u4eec\u65e2\u9700\u8981\u64cd\u4f5c\u5b83\u7684<strong>\u6d3b\u4f53\u5bf9\u8c61<\/strong>\uff08\u53bb\u6267\u884c\u00a0setCorePoolSize\uff09\uff0c\u53c8\u9700\u8981\u8bfb\u53d6\u5b83\u7684<strong>\u914d\u7f6e\u4fe1\u606f<\/strong>\uff08\u770b\u62a5\u8b66\u9608\u503c\u662f\u591a\u5c11\uff09\u3002<\/p>\n\n\n\n<p>\u5982\u679c\u6ca1\u6709\u8fd9\u4e2a\u7c7b\uff0c\u4f60\u7684\u65b9\u6cd5\u53c2\u6570\u53ef\u80fd\u5c31\u8981\u5199\u6210\u00a0method(executor, properties, id)\uff0c\u975e\u5e38\u9ebb\u70e6\u3002\u5b83\u628a\u00a0ID\u00a0+\u00a0Executor (\u6d3b\u4f53)\u00a0+\u00a0Properties (\u914d\u7f6e)\u00a0\u6346\u7ed1\u5728\u4e00\u8d77\u3002\u62ff\u5230\u4e00\u4e2a Holder\uff0c\u4f60\u5c31\u62ff\u5230\u4e86\u5173\u4e8e\u8fd9\u4e2a\u7ebf\u7a0b\u6c60\u7684\u4e00\u5207\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * \u7ebf\u7a0b\u6c60\u6267\u884c\u5668\u6301\u6709\u8005\u5bf9\u8c61\n * &lt;p>\n * \u4f5c\u8005\uff1a\u9a6c\u4e01\n * \u52a0\u9879\u76ee\u7fa4\uff1a\u65e9\u52a0\u5165\u5c31\u662f\u4f18\u52bf\uff01500\u4eba\u5185\u90e8\u9879\u76ee\u7fa4\uff0c\u5206\u4eab\u7684\u77e5\u8bc6\u603b\u6709\u4f60\u9700\u8981\u7684 &lt;a href=\"https:\/\/t.zsxq.com\/cw7b9\" \/>\n * \u5f00\u53d1\u65f6\u95f4\uff1a2025-04-20\n *\/\n@Data\n@AllArgsConstructor\npublic class ThreadPoolExecutorHolder {\n\u200b\n    \/**\n     * \u7ebf\u7a0b\u6c60\u552f\u4e00\u6807\u8bc6\n     *\/\n    private String threadPoolId;\n\u200b\n    \/**\n     * \u7ebf\u7a0b\u6c60\n     *\/\n    private ThreadPoolExecutor executor;\n\u200b\n    \/**\n     * \u7ebf\u7a0b\u6c60\u5c5e\u6027\u53c2\u6570\n     *\/\n    private ThreadPoolExecutorProperties executorProperties;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-one-thread-registry\">4. OneThreadRegistry<\/h3>\n\n\n\n<p>\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\u4e0e\u5176\u53c2\u6570\u914d\u7f6e\u7684\u805a\u5408\u95ee\u9898\u89e3\u51b3\u540e\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u8fd8\u9700\u8981\u8003\u8651\u4e00\u4e2a\u73b0\u5b9e\u95ee\u9898\uff1a<strong>\u5355\u4e2a\u9879\u76ee\u4e2d\u5f80\u5f80\u4e0d\u6b62\u4e00\u4e2a\u52a8\u6001\u7ebf\u7a0b\u6c60\u5b9e\u4f8b<\/strong> \u3002<\/p>\n\n\n\n<p>\u56e0\u6b64\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u5168\u5c40\u7edf\u4e00\u7684<strong>\u7ebf\u7a0b\u6c60\u7ba1\u7406\u5bb9\u5668<\/strong> \u6765\u8fdb\u884c\u96c6\u4e2d\u5b58\u50a8\u548c\u7ba1\u7406\uff0c\u8fd9\u5c31\u662f <code>OneThreadRegistry<\/code> \u7684\u7531\u6765\u3002<\/p>\n\n\n\n<p>\u8fd9\u4e2a\u6ce8\u518c\u4e2d\u5fc3\u7684\u8bbe\u8ba1\u975e\u5e38\u7b80\u6d01\uff0c\u4e3b\u8981\u63d0\u4f9b\u4e86\u4ee5\u4e0b\u4e09\u7c7b\u6838\u5fc3\u80fd\u529b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u65b0\u589e\u7ebf\u7a0b\u6c60\u5b9e\u4f8b<\/strong> \uff1b<\/li>\n\n\n\n<li><strong>\u6839\u636e\u7ebf\u7a0b\u6c60ID\u83b7\u53d6\u6307\u5b9a\u5b9e\u4f8b<\/strong> \uff1b<\/li>\n\n\n\n<li><strong>\u83b7\u53d6\u5f53\u524d\u6240\u6709\u7ebf\u7a0b\u6c60\u5b9e\u4f8b<\/strong> \u3002<\/li>\n<\/ul>\n\n\n\n<p>\u901a\u8fc7\u8fd9\u4e00\u7ba1\u7406\u5668\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4ee5\u7edf\u4e00\u7684\u65b9\u5f0f\u5bf9\u6240\u6709\u7ebf\u7a0b\u6c60\u8fdb\u884c\u6ce8\u518c\u3001\u67e5\u8be2\u548c\u7ef4\u62a4\u3002<\/p>\n\n\n\n<p>\u5185\u90e8\u6709\u4e00\u4e2a\u00a0ConcurrentHashMap\uff0cKey \u662f\u00a0threadPoolId\uff0cValue \u662f\u00a0Holder\u3002\u4ee3\u7801\u4e2d\u4efb\u4f55\u5730\u65b9\uff08\u6bd4\u5982 Controller \u63a5\u6536\u5230\u4fee\u6539\u914d\u7f6e\u8bf7\u6c42\uff0c\u6216\u8005\u5b9a\u65f6\u4efb\u52a1\u9700\u8981\u626b\u63cf\u76d1\u63a7\u6570\u636e\uff09\uff0c\u53ea\u8981getHolder\uff0c\u6ce8\u518c\u4e2d\u5fc3\u5c31\u80fd\u7acb\u9a6c\u628a\u5bf9\u5e94\u7684\u00a0Holder\u00a0\u7ed9\u51fa\u6765\u3002<\/p>\n\n\n\n<p>\u5b83\u662f\u6574\u4e2a\u52a8\u6001\u7ebf\u7a0b\u6c60\u6846\u67b6\u7684<strong>\u5165\u53e3<\/strong>\u548c<strong>\u67a2\u7ebd<\/strong>\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * \u52a8\u6001\u7ebf\u7a0b\u6c60\u7ba1\u7406\u5668\uff0c\u7528\u4e8e\u7edf\u4e00\u7ba1\u7406\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\n * &lt;p>\n * \u4f5c\u8005\uff1a\u9a6c\u4e01\n * \u52a0\u9879\u76ee\u7fa4\uff1a\u65e9\u52a0\u5165\u5c31\u662f\u4f18\u52bf\uff01500\u4eba\u5185\u90e8\u9879\u76ee\u7fa4\uff0c\u5206\u4eab\u7684\u77e5\u8bc6\u603b\u6709\u4f60\u9700\u8981\u7684 &lt;a href=\"https:\/\/t.zsxq.com\/cw7b9\" \/>\n * \u5f00\u53d1\u65f6\u95f4\uff1a2025-04-20\n *\/\npublic class OneThreadRegistry {\n\u200b\n    \/**\n     * \u7ebf\u7a0b\u6c60\u6301\u6709\u8005\u7f13\u5b58\uff0ckey \u4e3a\u7ebf\u7a0b\u6c60\u552f\u4e00\u6807\u8bc6\uff0cvalue \u4e3a\u7ebf\u7a0b\u6c60\u5305\u88c5\u7c7b\n     *\/\n    private static final Map&lt;String, ThreadPoolExecutorHolder> HOLDER_MAP = new ConcurrentHashMap&lt;>();\n\u200b\n    \/**\n     * \u6ce8\u518c\u7ebf\u7a0b\u6c60\u5230\u7ba1\u7406\u5668\n     *\n     * @param threadPoolId \u7ebf\u7a0b\u6c60\u552f\u4e00\u6807\u8bc6\n     * @param executor     \u7ebf\u7a0b\u6c60\u6267\u884c\u5668\u5b9e\u4f8b\n     * @param properties   \u7ebf\u7a0b\u6c60\u53c2\u6570\u914d\u7f6e\n     *\/\n    public static void putHolder(String threadPoolId, ThreadPoolExecutor executor, ThreadPoolExecutorProperties properties) {\n        ThreadPoolExecutorHolder executorHolder = new ThreadPoolExecutorHolder(threadPoolId, executor, properties);\n        HOLDER_MAP.put(threadPoolId, executorHolder);\n    }\n\u200b\n    \/**\n     * \u6839\u636e\u7ebf\u7a0b\u6c60 ID \u83b7\u53d6\u5bf9\u5e94\u7684\u7ebf\u7a0b\u6c60\u5305\u88c5\u5bf9\u8c61\n     *\n     * @param threadPoolId \u7ebf\u7a0b\u6c60\u552f\u4e00\u6807\u8bc6\n     * @return \u7ebf\u7a0b\u6c60\u6301\u6709\u8005\u5bf9\u8c61\n     *\/\n    public static ThreadPoolExecutorHolder getHolder(String threadPoolId) {\n        return HOLDER_MAP.get(threadPoolId);\n    }\n\u200b\n    \/**\n     * \u83b7\u53d6\u6240\u6709\u7ebf\u7a0b\u6c60\u96c6\u5408\n     *\n     * @return \u7ebf\u7a0b\u6c60\u96c6\u5408\n     *\/\n    public static Collection&lt;ThreadPoolExecutorHolder> getAllHolders() {\n        return HOLDER_MAP.values();\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u8fd9\u56db\u4e2a\u7c7b\u6784\u6210\u4e86\u52a8\u6001\u7ebf\u7a0b\u6c60\u4f53\u7cfb\u4e2d\u6700\u6838\u5fc3\u7684\u57fa\u7840\u4ee3\u7801\uff0c\u540e\u7eed\u7684\u6240\u6709\u529f\u80fd\u8bbe\u8ba1\u51e0\u4e4e\u90fd\u662f\u56f4\u7ed5\u5b83\u4eec\u5c55\u5f00\u7684\u3002<\/p>\n\n\n\n<p>\u5f53\u5927\u5bb6\u5bf9\u8fd9\u4e9b\u57fa\u7840\u8bbe\u65bd\u6709\u4e86\u6e05\u6670\u7684\u7406\u89e3\u4e4b\u540e\uff0c\u518d\u53bb\u9605\u8bfb\u5176\u4ed6\u57fa\u4e8e\u8fd9\u4e9b\u5bf9\u8c61\u6784\u5efa\u7684 API\uff0c\u5c31\u80fd\u66f4\u5bb9\u6613\u628a\u63e1\u5176\u80cc\u540e\u7684\u4e0a\u4e0b\u6587\u8bed\u4e49\u4e0e\u8bbe\u8ba1\u52a8\u673a\uff0c\u4ece\u800c\u771f\u6b63\u505a\u5230\u201c\u77e5\u5176\u7136\uff0c\u4e5f\u77e5\u5176\u6240\u4ee5\u7136\u201d\u3002<\/p>\n\n\n\n<p>\u5927\u6982\u7684\u5168\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u914d\u7f6e\u4e0b\u53d1<\/strong>\uff1a\u914d\u7f6e\u4e2d\u5fc3\uff08\u5982 Nacos\uff09\u63a8\u9001\u5230\u672c\u5730\uff0c\u5305\u542b\u6700\u65b0\u7684\u00a0Properties\u00a0JSON \u6570\u636e\u3002<\/li>\n\n\n\n<li><strong>\u67e5\u627e\u76ee\u6807<\/strong>\uff1a\u7a0b\u5e8f\u8c03\u7528\u00a0OneThreadRegistry.getHolder(threadPoolId)\uff0c\u627e\u5230\u4e86\u5bf9\u5e94\u7684\u00a0<strong>\u6863\u6848\u888b (Holder)<\/strong>\u3002<\/li>\n\n\n\n<li><strong>\u63d0\u53d6\u5bf9\u8c61<\/strong>\uff1a\u4ece\u6863\u6848\u888b\u91cc\u62ff\u51fa\u00a0<strong>\u5458\u5de5\u56e2\u961f (OneThreadExecutor)<\/strong>\u3002<\/li>\n\n\n\n<li><strong>\u6267\u884c\u53d8\u66f4<\/strong>\uff1a\u8c03\u7528\u00a0executor.setCorePoolSize(newProperties.getCorePoolSize())\u3002<\/li>\n\n\n\n<li><strong>\u66f4\u65b0\u6863\u6848<\/strong>\uff1a\u5c06\u65b0\u7684\u914d\u7f6e\u8986\u76d6\u5230\u00a0Holder\u00a0\u4e2d\u7684\u00a0executorProperties\uff0c\u786e\u4fdd\u6863\u6848\u548c\u73b0\u72b6\u4e00\u81f4\u3002<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"511\" height=\"972\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766028354-image.png\" alt=\"\" class=\"wp-image-1480\" style=\"width:239px;height:auto\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766028354-image.png 511w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766028354-image-158x300.png 158w\" sizes=\"auto, (max-width: 511px) 100vw, 511px\" \/><\/figure>\n\n\n\n<p>\u6211\u4eec\u4f9d\u6b21\u5728idea\u91cc\u9762\u5b8c\u6210\u5982\u56fe\u5185\u5bb9<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>OneThreadExecutor.java<\/strong>\u00a0->\u00a0core\/executor\n<ul class=\"wp-block-list\">\n<li>\u8fd9\u662f\u6838\u5fc3\u4e1a\u52a1\u5bf9\u8c61\uff0c\u5fc5\u987b\u5728 executor \u5305\u7684\u6839\u76ee\u5f55\u4e0b\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>ThreadPoolExecutorProperties.java<\/strong>\u00a0->\u00a0core\/executor\n<ul class=\"wp-block-list\">\n<li>\u867d\u7136\u770b\u8d77\u6765\u50cf config\uff0c\u4f46\u5b83\u662f<strong>\u4e13\u5c5e\u4e8e executor \u7684\u914d\u7f6e\u5b9a\u4e49<\/strong>\uff0c\u4e0d\u662f Spring \u7684 Configuration \u7c7b\uff0c\u6240\u4ee5\u901a\u5e38\u7d27\u6328\u7740 Executor \u653e\u7f6e\uff0c\u6216\u8005\u5728\u00a0core\/executor\/domain\uff08\u5982\u679c\u5206\u5c42\u5f88\u7ec6\uff09\uff0c\u4f46\u5728\u9a6c\u54e5\u8fd9\u4e2a\u7ed3\u6784\u91cc\uff0c\u76f4\u63a5\u653e\u5728\u00a0core\/executor\u00a0\u6700\u5408\u9002\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>ThreadPoolExecutorHolder.java<\/strong>\u00a0->\u00a0core\/executor\n<ul class=\"wp-block-list\">\n<li>\u8fd9\u662f Executor \u7684\u5bb9\u5668\uff0c\u5c5e\u4e8e\u6838\u5fc3\u9886\u57df\u6a21\u578b\u7684\u4e00\u90e8\u5206\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>OneThreadRegistry.java<\/strong>\u00a0->\u00a0core\/executor\n<ul class=\"wp-block-list\">\n<li>\u8fd9\u662f Executor \u7684\u7ba1\u7406\u5668\uff0c\u4e0e Executor \u5904\u4e8e\u540c\u4e00\u5c42\u7ea7\u6216\u8005\u662f\u5176\u4e0a\u5c42\u5165\u53e3\uff0c\u653e\u5728\u8fd9\u91cc\u6700\u4e3a\u5408\u7406\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u8fd9\u4e2a\u00a0support\u00a0\u5305\u901a\u5e38\u7528\u6765\u653e\u90a3\u4e9b\u4e3a\u4e86\u8ba9\u6838\u5fc3\u7c7b\u8dd1\u8d77\u6765\u800c\u9700\u8981\u7684\u8f85\u52a9\u8bbe\u65bd\uff1b\u53ea\u662f\u731c\u60f3\uff0c\u4f8b\u5982\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u81ea\u5b9a\u4e49\u961f\u5217<\/strong>\uff1aJDK \u7684\u00a0LinkedBlockingQueue\u00a0\u9ed8\u8ba4\u4e0d\u652f\u6301\u52a8\u6001\u4fee\u6539\u5bb9\u91cf\uff0c\u52a8\u6001\u7ebf\u7a0b\u6c60\u901a\u5e38\u4f1a\u628a\u5b83\u7684\u4ee3\u7801 copy \u51fa\u6765\u6539\u4e00\u4e0b\uff08\u6bd4\u5982\u53eb\u00a0ResizableCapacityLinkedBlockIngQueue\uff09\uff0c\u8fd9\u4e2a\u7c7b\u5c31\u9002\u5408\u653e\u5728\u00a0support\u00a0\u5305\u3002<\/li>\n\n\n\n<li><strong>\u4efb\u52a1\u5305\u88c5\u5668<\/strong>\uff1a\u5982\u679c\u4f60\u9700\u8981\u5bf9\u63d0\u4ea4\u7684 Runnable \u8fdb\u884c\u5305\u88c5\uff08\u6bd4\u5982\u4e3a\u4e86\u4f20\u9012 ThreadLocal\uff09\uff0c\u8fd9\u4e2a Wrapper \u7c7b\u653e\u5728\u00a0support\u3002<\/li>\n\n\n\n<li><strong>\u5de5\u5382\u7c7b<\/strong>\uff1aThreadFactory\u00a0\u7684\u81ea\u5b9a\u4e49\u5b9e\u73b0\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"builder\">Builder \u8bbe\u8ba1\u6a21\u5f0f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-builder\">1. \u4ec0\u4e48\u662f Builder \u8bbe\u8ba1\u6a21\u5f0f\uff1f<\/h3>\n\n\n\n<p>\u5728 <code>core<\/code> \u5305\u4e2d\uff0c\u6211\u4eec\u4e5f\u5f15\u5165\u4e86\u4e00\u79cd\u5e38\u89c1\u7684\u8bbe\u8ba1\u6a21\u5f0f \u2014\u2014 <strong>Builder\u6a21\u5f0f<\/strong> \u3002<\/p>\n\n\n\n<p>\u968f\u7740\u7ebf\u7a0b\u6c60\u529f\u80fd\u9010\u6b65\u589e\u5f3a\uff0c\u6211\u4eec\u9700\u8981\u5f15\u5165\u66f4\u591a\u81ea\u5b9a\u4e49\u53c2\u6570\uff0c\u4f8b\u5982\uff1a\u52a8\u6001\u7ebf\u7a0b\u6c60\u6807\u8bc6\u3001\u9879\u76ee\u5173\u95ed\u65f6\u7b49\u5f85\u4efb\u52a1\u5b8c\u6210\u7684\u6700\u5927\u65f6\u957f\u7b49\u3002\u8fd9\u4e9b\u53c2\u6570\u5728\u6784\u5efa\u8fc7\u7a0b\u4e2d\u4e0d\u4ec5\u9700\u8981\u8fdb\u884c\u5408\u7406\u6027\u6821\u9a8c\uff0c\u8fd8\u53ef\u80fd\u5f71\u54cd\u6700\u7ec8\u6784\u9020\u51fa\u7684\u7ebf\u7a0b\u6c60\u7c7b\u578b\uff08\u666e\u901a\u6216\u52a8\u6001\u7ebf\u7a0b\u6c60\uff09\u3002<\/p>\n\n\n\n<p>\u4e3a\u4e86\u89e3\u51b3\u4e0a\u8ff0\u6784\u5efa\u7075\u6d3b\u6027\u4e0e\u53ef\u7ef4\u62a4\u6027\u7684\u95ee\u9898\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86 <code>ThreadPoolExecutorBuilder<\/code>\uff0c\u5b83\u91c7\u7528\u4e86\u7ecf\u5178\u7684 <strong>Builder\u6a21\u5f0f<\/strong> \uff0c\u5c06\u7ebf\u7a0b\u6c60\u7684\u5404\u9879\u914d\u7f6e\u53c2\u6570\u5c01\u88c5\u4e3a\u94fe\u5f0f\u8c03\u7528\u5f62\u5f0f\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Builder \u6a21\u5f0f\u4f5c\u7528\u57df\uff1a<strong>\u5982\u679c\u7c7b\u7684\u5c5e\u6027\u4e4b\u95f4\u6709\u4e00\u5b9a\u7684\u4f9d\u8d56\u5173\u7cfb\u6216\u8005\u7ea6\u675f\u6761\u4ef6\uff08\u6e90\u81ea\u8bbe\u8ba1\u6a21\u5f0f\u4e4b\u7f8e<\/strong>\uff09<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5982\u679c\u4e0d\u4f7f\u7528 Builder \u6a21\u5f0f\uff0c\u4f60\u76f4\u63a5\u53bb\u4e70\uff08\u8c03\u7528\u6784\u9020\u51fd\u6570\uff09\uff0c\u60c5\u51b5\u662f\u8fd9\u6837\u7684\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<ol class=\"wp-block-list\">\n<li>\u53c2\u6570\u592a\u591a\uff1aJDK \u539f\u751f\u7ebf\u7a0b\u6c60\u6784\u9020\u51fd\u6570\u6709 7 \u4e2a\u53c2\u6570\uff0c\u4f60\u7684\u00a0OneThreadExecutor\u00a0\u53ef\u80fd\u6709 9 \u4e2a\u751a\u81f3\u66f4\u591a\u3002\u4e00\u65e6\u5199\u9519\u987a\u5e8f\uff08\u6bd4\u5982\u628a\u00a0keepAliveTime\u00a0\u548c\u00a0poolSize\u00a0\u5199\u53cd\u4e86\uff09\uff0c\u7f16\u8bd1\u5668\u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u7a0b\u5e8f\u8fd0\u884c\u4f1a\u70b8\u3002<\/li>\n\n\n\n<li>\u903b\u8f91\u5206\u6563\uff1a\u4f60\u600e\u4e48\u4fdd\u8bc1\u201c\u6838\u5fc3\u7ebf\u7a0b\u6570\u201d\u4e00\u5b9a\u5c0f\u4e8e\u201c\u6700\u5927\u7ebf\u7a0b\u6570\u201d\uff1f<\/li>\n\n\n\n<li>\u4ea7\u51fa\u5355\u4e00\uff1a\u6784\u9020\u51fd\u6570\u53ea\u80fd\u4ea7\u51fa\u4e00\u79cd\u5bf9\u8c61\u3002\u4f46\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u9700\u8981\u6839\u636e\u914d\u7f6e\u51b3\u5b9a\u662f\u4ea7\u51fa\u00a0\u201c\u666e\u901a\u5458\u5de5\u7ec4\u201d\u00a0\u8fd8\u662f\u00a0\u201c\u5e26\u5de5\u724c\u7684\u52a8\u6001\u5458\u5de5\u7ec4\u201d\u3002<\/li>\n<\/ol>\n<\/blockquote>\n\n\n\n<p>Builder \u6a21\u5f0f\u5c31\u662f\u201c\u5b9a\u5236\u914d\u7f6e\u5355\u201d\uff1b\u4f60\u4e0d\u9700\u8981\u4e00\u6b21\u6027\u628a\u6240\u6709\u96f6\u4ef6\u585e\u7ed9\u8001\u677f\uff0c\u800c\u662f\u62ff\u4e00\u5f20\u8868\uff0c\u4e00\u9879\u4e00\u9879\u586b\u3002\u586b\u9519\u4e86\u53ef\u4ee5\u6539\uff0c\u586b\u5b8c\u4e86\u4ea4\u7ed9\u8001\u677f\uff08\u8c03\u7528\u00a0build()\uff09\uff0c\u8001\u677f\u5728\u53d1\u8d27\u524d\u4f1a\u505a\u6700\u540e\u4e00\u6b21<strong>\u5168\u68c0<\/strong>\u3002<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2\">2. \u5e38\u89c1\u95ee\u9898\u7b54\u7591<\/h3>\n\n\n\n<p>\u53ef\u80fd\u6709\u540c\u5b66\u4f1a\u7591\u60d1\uff1a<strong>Lombok\u4e0d\u662f\u4e5f\u63d0\u4f9b\u4e86<code>@Builder<\/code>\u6ce8\u89e3\u5417\uff1f\u90a3\u4e3a\u4ec0\u4e48\u6211\u4eec\u8fd8\u8981\u624b\u52a8\u5b9e\u73b0Builder\u6a21\u5f0f\u5462\uff1f<\/strong><\/p>\n\n\n\n<p>\u4e3a\u4e86\u5e2e\u52a9\u5927\u5bb6\u66f4\u76f4\u89c2\u5730\u7406\u89e3\u4e24\u8005\u7684\u5dee\u5f02\uff0c\u6211\u6574\u7406\u4e86\u4e00\u5f20\u5bf9\u6bd4\u8868\u683c\uff0c\u5217\u51fa\u4e86\u624b\u52a8\u5b9e\u73b0 Builder \u4e0e Lombok <code>@Builder<\/code> \u6ce8\u89e3\u5728\u4f7f\u7528\u4e0a\u7684\u4e3b\u8981\u533a\u522b\u548c\u5404\u81ea\u7684\u9002\u7528\u573a\u666f\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th class=\"has-text-align-left\" data-align=\"left\">\u5bf9\u6bd4\u9879<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u5e38\u89c4 Builder \u6a21\u5f0f<\/th><th class=\"has-text-align-left\" data-align=\"left\">Lombok <code>@Builder<\/code> \u6ce8\u89e3<\/th><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5b9e\u73b0\u65b9\u5f0f<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u624b\u52a8\u7f16\u5199 <code>Builder<\/code> \u7c7b\u548c\u94fe\u5f0f\u65b9\u6cd5<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u81ea\u52a8\u751f\u6210 <code>Builder<\/code> \u7c7b\u3001\u6784\u9020\u5668\u548c\u94fe\u5f0f\u65b9\u6cd5<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u4ee3\u7801\u63a7\u5236\u529b<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9ad8\uff1a\u53ef\u4ee5\u81ea\u7531\u63a7\u5236\u6784\u9020\u903b\u8f91\u3001\u53c2\u6570\u6821\u9a8c\u3001\u9ed8\u8ba4\u503c<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4f4e\uff1a\u903b\u8f91\u590d\u6742\u65f6\u4e0d\u6613\u63d2\u5165\u4e2d\u95f4\u5904\u7406<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u53ef\u8bfb\u6027\/IDE\u4f53\u9a8c<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u660e\u786e\u7ed3\u6784\u6e05\u6670\uff0c\u5bb9\u6613\u8c03\u8bd5\u548c\u5bfc\u822a<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5feb\u901f\u751f\u6210\uff0c\u7701\u4ee3\u7801\uff0c\u4f46\u4e0d\u6613\u9605\u8bfb\u3001\u8c03\u8bd5<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u9ed8\u8ba4\u503c\u652f\u6301<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6613\u4e8e\u901a\u8fc7\u6784\u9020\u5668\u903b\u8f91\u6ce8\u5165\u9ed8\u8ba4\u503c<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u53ea\u80fd\u4f9d\u8d56\u5b57\u6bb5\u5b9a\u4e49\u5904\u7684\u521d\u59cb\u5316\uff08\u6216\u540e\u5904\u7406\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u7ee7\u627f\u652f\u6301<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u652f\u6301\u66f4\u7075\u6d3b\u7684\u7ee7\u627f\u548c\u6269\u5c55<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4e0d\u652f\u6301\u7ee7\u627f Builder\uff0c\u590d\u6742\u573a\u666f\u9650\u5236\u8f83\u591a<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u65b9\u6cd5\u91cd\u8f7d\u63a7\u5236<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u53ef\u7cbe\u7ec6\u8bbe\u8ba1\u591a\u4e2a\u6784\u9020\u8def\u5f84<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4e0d\u652f\u6301\u591a\u79cd\u6784\u9020\u65b9\u5f0f\uff0c\u5bb9\u6613\u53d7\u9650<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u751f\u6210\u989d\u5916\u6784\u9020\u5668<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u81ea\u5df1\u63a7\u5236<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4f1a\u81ea\u52a8\u751f\u6210 <code>builder()<\/code> \u65b9\u6cd5<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5b66\u4e60\/\u4f7f\u7528\u6210\u672c<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9ad8\u4e00\u4e9b\uff0c\u4f46\u903b\u8f91\u6e05\u6670\uff0c\u4fbf\u4e8e\u7ef4\u62a4<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u975e\u5e38\u4f4e\uff0c\u4e0a\u624b\u5feb\uff0c\u9002\u5408\u7b80\u5355\u573a\u666f<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Lombok \u63d0\u4f9b\u7684 <code>@Builder<\/code> \u6ce8\u89e3\u786e\u5b9e\u5f88\u65b9\u4fbf\uff0c\u5b83\u7684\u6700\u5927\u4f18\u52bf\u5728\u4e8e<strong>\u7701\u4ee3\u7801\u3001\u4e0a\u624b\u5feb<\/strong> \uff0c\u975e\u5e38\u9002\u5408\u7528\u4e8e\u6784\u5efa\u7b80\u5355\u7684 Java \u5bf9\u8c61\u3002\u4f46\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u624b\u5199\u7684 Builder \u6a21\u5f0f\u5219\u5177\u6709\u66f4\u5f3a\u7684<strong>\u7075\u6d3b\u6027\u548c\u53ef\u63a7\u6027<\/strong> \uff0c\u80fd\u591f<strong>\u652f\u6301\u590d\u6742\u6784\u5efa\u903b\u8f91\u3001\u53c2\u6570\u6821\u9a8c\u3001\u9ed8\u8ba4\u503c\u6ce8\u5165\u7b49\u6269\u5c55\u573a\u666f<\/strong> \u3002<\/p>\n\n\n\n<p>\u4ee5\u6211\u4eec\u5f53\u524d\u7684\u7ebf\u7a0b\u6c60\u6784\u5efa\u5668\u4e3a\u4f8b\uff0c\u5982\u679c\u5355\u7eaf\u4f7f\u7528 Lombok \u7684 <code>@Builder<\/code>\uff0c\u53ea\u80fd\u6784\u9020\u51fa\u4e00\u4e2a\u9759\u6001\u5bf9\u8c61\uff0c<strong>\u65e0\u6cd5\u6839\u636e\u6784\u5efa\u8fc7\u7a0b\u4e2d\u7684\u53c2\u6570\u52a8\u6001\u51b3\u5b9a\u662f\u521b\u5efa\u666e\u901a\u7ebf\u7a0b\u6c60\u8fd8\u662f\u52a8\u6001\u7ebf\u7a0b\u6c60<\/strong> \uff0c\u4e5f<strong>\u65e0\u6cd5\u5728\u6784\u5efa\u8fc7\u7a0b\u4e2d\u63d2\u5165\u5b9a\u5236\u5316\u6821\u9a8c\u6216\u521d\u59cb\u5316\u903b\u8f91<\/strong> \u3002Lombok @Builder \u7c7b\u4f3c\u662f\u590d\u8bfb\u673a\u4f60\u7ed9\u5b83\u4ec0\u4e48\u5c5e\u6027\uff0c\u5b83\u5c31\u585e\u8fdb\u5bf9\u8c61\u91cc\uff0c\u5b83\u6ca1\u6709\u601d\u8003\u80fd\u529b\u3002<\/p>\n\n\n\n<p>\u800c\u5728\u6211\u4eec\u624b\u5199\u7684\u6784\u5efa\u5668\u4e2d\uff0c\u6700\u7ec8 <code>build()<\/code> \u65b9\u6cd5\u5c31\u662f\u6269\u5c55\u80fd\u529b\u7684\u6838\u5fc3\u4f53\u73b0\u3002\u76ee\u524d\u6211\u4eec\u53ea\u9a8c\u8bc1\u4e86\u90e8\u5206\u6838\u5fc3\u53c2\u6570\uff0c\u5b9e\u9645\u4e0a\u8fd8\u53ef\u4ee5\u5728\u8fd9\u91cc\u52a0\u5165\u66f4\u591a\u6821\u9a8c\u903b\u8f91\uff0c\u4f8b\u5982\u7ebf\u7a0b\u6c60\u5bb9\u91cf\u662f\u5426\u5339\u914d\u3001\u62d2\u7edd\u7b56\u7565\u662f\u5426\u5408\u6cd5\u3001\u7b49\u5f85\u65f6\u957f\u662f\u5426\u8d85\u957f\u7b49\u3002\u521b\u5efa\u5bf9\u8c61\u7684\u6700\u540e\u4e00\u523b\uff0c\u6839\u636e\u4f60\u8f93\u5165\u7684\u53c2\u6570\uff0c\u8fdb\u884c\u903b\u8f91\u5224\u65ad\u3001\u8fd0\u7b97\u548c\u6821\u9a8c\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public ThreadPoolExecutor build() {\n    \/\/ 1. \u667a\u80fd\u8f6c\u6362\uff1a\u6839\u636e\u5b57\u7b26\u4e32\u7c7b\u578b\u7684\u961f\u5217\u540d\u79f0\uff0c\u521b\u5efa\u51fa\u5b9e\u9645\u7684\u963b\u585e\u961f\u5217\u5bf9\u8c61\n    \/\/ Lombok \u505a\u4e0d\u5230\u8fd9\u4e00\u70b9\uff0c\u5b83\u53ea\u80fd\u5355\u7eaf\u4f20\u9012\u5b57\u7b26\u4e32\n    BlockingQueue&lt;Runnable> blockingQueue = BlockingQueueTypeEnum.createBlockingQueue(workQueueType.getName(), workQueueCapacity);\n\n    \/\/ 2. \u9ed8\u8ba4\u503c\u515c\u5e95\uff1a\u5982\u679c\u4f60\u6ca1\u8bbe\u62d2\u7edd\u7b56\u7565\uff0c\u9ed8\u8ba4\u7ed9\u4f60 AbortPolicy\n    RejectedExecutionHandler rejectedHandler = Optional.ofNullable(this.rejectedHandler)\n            .orElseGet(() -> new ThreadPoolExecutor.AbortPolicy());\n\n    \/\/ 3. \u5fc5\u586b\u9879\u6821\u9a8c\uff1a\u6ca1\u6709\u5de5\u5382\u600e\u4e48\u62db\u4eba\uff1f\u62a5\u9519\uff01\n    Assert.notNull(threadFactory, \"The thread factory cannot be null.\");\n\n    ThreadPoolExecutor threadPoolExecutor;\n    \n    \/\/ ==========================================\n    \/\/ 4. \u3010\u6838\u5fc3\u903b\u8f91\u3011\u51b3\u5b9a\u4ea7\u51fa\u7269\u79cd\uff08\u8fd9\u662f Lombok \u7edd\u5bf9\u505a\u4e0d\u5230\u7684\uff09\n    \/\/ ==========================================\n    if (dynamicPool) {\n        \/\/ \u5982\u679c\u6807\u8bb0\u4e86\u662f\u52a8\u6001\u7ebf\u7a0b\u6c60\uff0c\u5c31\u4ea7\u51fa OneThreadExecutor (\u5e26ID\uff0c\u5e26\u76d1\u63a7)\n        threadPoolExecutor = new OneThreadExecutor(\n                threadPoolId,\n                \/\/ ... \u53c2\u6570\u4f20\u5165\n        );\n    } else {\n        \/\/ \u5426\u5219\uff0c\u4ea7\u51fa\u539f\u751f\u7684 JDK ThreadPoolExecutor (\u7701\u8d44\u6e90\uff0c\u7b80\u5355)\n        threadPoolExecutor = new ThreadPoolExecutor(\n                \/\/ ... \u53c2\u6570\u4f20\u5165\n        );\n    }\n\n    \/\/ 5. \u540e\u7f6e\u5904\u7406\uff1a\u8bbe\u7f6e\u5141\u8bb8\u6838\u5fc3\u7ebf\u7a0b\u8d85\u65f6\n    threadPoolExecutor.allowCoreThreadTimeOut(allowCoreThreadTimeOut);\n    \n    return threadPoolExecutor;\n}<\/code><\/pre>\n\n\n\n<p>\u53ef\u80fd\u6709\u540c\u5b66\u4f1a\u95ee\uff1a<strong>\u50cf\u201c\u7b49\u5f85\u65f6\u957f\u662f\u5426\u8d85\u51fa\u9650\u5236\u201d\u8fd9\u6837\u7684\u53c2\u6570\u6821\u9a8c\uff0c\u6211\u5728\u8bbe\u7f6e\u53c2\u6570\u7684\u65f6\u5019\u76f4\u63a5\u6821\u9a8c\u4e0d\u5c31\u884c\u4e86\u5417\uff1f<\/strong><\/p>\n\n\n\n<p>\u4ece\u67d0\u4e9b\u7b80\u5355\u573a\u666f\u6765\u770b\uff0c\u8fd9\u786e\u5b9e\u662f\u53ef\u884c\u7684\u3002\u4f46\u4e00\u65e6\u51fa\u73b0<strong>\u53c2\u6570\u4e4b\u95f4\u5b58\u5728\u4f9d\u8d56\u5173\u7cfb<\/strong> \uff0c\u5c31\u4e0d\u9002\u5408\u5728\u6bcf\u4e2a Setter \u65b9\u6cd5\u4e2d\u9010\u4e00\u6821\u9a8c\u4e86\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u8fd8\u6709\u4e00\u70b9\uff0c\u6709\u53ef\u80fd\u7528\u6237\u6ca1\u6709\u8c03\u7528\u8fd9\u4e2a\u53c2\u6570\u65b9\u6cd5\uff0c\u4f46\u662f\u6700\u7ec8\u662f\u9700\u8981\u5fc5\u586b\u7684\u3002<\/p>\n<\/blockquote>\n\n\n\n<p>\u4e3e\u4e2a\u5178\u578b\u4f8b\u5b50\uff1a<strong>\u6838\u5fc3\u7ebf\u7a0b\u6570\u4e0d\u80fd\u5927\u4e8e\u6700\u5927\u7ebf\u7a0b\u6570<\/strong> \u3002\u5982\u679c\u4f60\u5728\u8bbe\u7f6e <code>corePoolSize<\/code> \u65f6\u5c31\u8fdb\u884c\u6821\u9a8c\uff0c\u800c\u8fd9\u65f6 <code>maximumPoolSize<\/code> \u8fd8\u672a\u8bbe\u7f6e\uff0c\u663e\u7136\u6821\u9a8c\u662f\u65e0\u6548\u6216\u9519\u8bef\u7684\u3002\u8fd9\u79cd\u8de8\u5b57\u6bb5\u7684\u903b\u8f91\u4f9d\u8d56\uff0c\u53ea\u6709\u5728 <strong>\u6240\u6709\u53c2\u6570\u90fd\u914d\u7f6e\u5b8c\u6bd5\u3001\u51c6\u5907\u6784\u5efa\u5b9e\u4f8b\u7684\u6700\u540e\u4e00\u6b65\uff08\u5373<code>build()<\/code>\u65b9\u6cd5\uff09<\/strong> \u65f6\u624d\u80fd\u7edf\u4e00\u5224\u65ad\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5047\u8bbe\u9ed8\u8ba4 core=10, max=20\u3002<\/li>\n\n\n\n<li>\u4f60\u60f3\u6539\u6210 core=5, max=10\u3002<\/li>\n\n\n\n<li>\u4f60\u5148\u8c03\u7528\u00a0setMax(10)\u00a0-> \u6b64\u65f6 core(10) > max(10)\uff0c<strong>\u62a5\u9519\uff01<\/strong><\/li>\n\n\n\n<li>\u4f60\u88ab\u8feb\u5fc5\u987b\u5148\u6539 core\uff0c\u8fd9\u4f7f\u5f97\u8c03\u7528\u987a\u5e8f\u53d8\u5f97\u654f\u611f\uff0c\u4f53\u9a8c\u6781\u5dee\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u8fd8\u6709\u4e00\u70b9\u4e5f\u503c\u5f97\u6ce8\u610f\uff1a<strong>\u6709\u4e9b\u53c2\u6570\u662f\u5fc5\u586b\u7684\uff0c\u4f46\u7528\u6237\u53ef\u80fd\u6839\u672c\u6ca1\u6709\u8c03\u7528\u5bf9\u5e94\u7684Setter\u65b9\u6cd5\u8fdb\u884c\u8bbe\u7f6e<\/strong> \u3002<\/p>\n\n\n\n<p>\u6bd4\u5982\u7ebf\u7a0b\u6c60\u7684 <code>threadFactory<\/code> \u6216 <code>threadPoolId<\/code>\uff0c\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u662f\u6784\u9020\u7ebf\u7a0b\u6c60\u6240\u5fc5\u9700\u7684\u6838\u5fc3\u53c2\u6570\u3002\u5982\u679c\u4e0d\u5728\u6700\u7ec8\u7684 <code>build()<\/code> \u65b9\u6cd5\u4e2d\u7edf\u4e00\u6821\u9a8c\u8fd9\u4e9b\u201c\u5fc5\u586b\u4f46\u53ef\u80fd\u88ab\u9057\u6f0f\u201d\u7684\u5b57\u6bb5\uff0c\u5c31\u53ef\u80fd\u5bfc\u81f4\u7ebf\u7a0b\u6c60\u5728\u8fd0\u884c\u65f6\u629b\u51fa\u5f02\u5e38\u6216\u51fa\u73b0\u4e0d\u53ef\u9884\u671f\u7684\u884c\u4e3a\u3002<\/p>\n\n\n\n<p>\u56e0\u6b64\uff0c<strong><code>build()<\/code>\u65b9\u6cd5\u4e0d\u4ec5\u662f\u6784\u5efa\u5b9e\u4f8b\u7684\u5165\u53e3\uff0c\u4e5f\u662f\u505a\u201c\u6700\u7ec8\u515c\u5e95\u6821\u9a8c\u201d\u7684\u6700\u4f73\u4f4d\u7f6e<\/strong> \uff0c\u53ef\u4ee5\u6700\u5927\u7a0b\u5ea6\u5730\u786e\u4fdd\u6784\u9020\u51fa\u6765\u7684\u5bf9\u8c61\u662f\u5b8c\u6574\u3001\u5408\u6cd5\u3001\u53ef\u7528\u7684\u3002<\/p>\n\n\n\n<p>ThreadPoolExecutorBuilder\u00a0<strong>\u5de5\u5177\/\u8f85\u52a9\u6784\u5efa\u7c7b<\/strong>\u5e94\u8be5\u653e\u5728\u00a0core\/toolkit.<br><code>\u251c\u2500\u2500 src<br>\u2502 \u251c\u2500\u2500 main<br>\u2502 \u2502 \u2514\u2500\u2500 java<br>\u2502 \u2502 \u2514\u2500\u2500 com<br>\u2502 \u2502 \u2514\u2500\u2500 nageoffer<br>\u2502 \u2502 \u2514\u2500\u2500 onethread<br>\u2502 \u2502 \u2514\u2500\u2500 core<br>\u2502 \u2502     \u251c\u2500\u2500 alarm<br>\u2502 \u2502     \u251c\u2500\u2500 config<br>\u2502 \u2502     \u251c\u2500\u2500 constant<br>\u2502 \u2502     \u251c\u2500\u2500 executor<br>\u2502 \u2502     \u251c\u2500\u2500 monitor<br>\u2502 \u2502     \u251c\u2500\u2500 notification<br>\u2502 \u2502     \u251c\u2500\u2500 parser<br>\u2502 \u2502     \u2514\u2500\u2500 toolkit &lt;-- \u3010\u5c31\u5728\u8fd9\u91cc\u3011<br>\u2502 \u2502          \u251c\u2500\u2500 ThreadPoolExecutorBuilder.java (\u6838\u5fc3\u6784\u5efa\u5668)<br>\u2502 \u2502          \u2514\u2500\u2500 ThreadFactoryBuilder.java (\u901a\u5e38\u4e5f\u4f1a\u6709\u4e00\u4e2a\u7ebf\u7a0b\u5de5\u5382\u6784\u5efa\u5668)<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hutool\u5982\u4f55\u4f7f\u7528Builder\u6a21\u5f0f\u521b\u5efa\u7ebf\u7a0b\u6c60<\/h3>\n\n\n\n<p>\u8fd9\u7bc7\u6587\u7ae0\u5f88\u7cbe\u5f69\uff0c\u4ee5 Hutool \u5de5\u5177\u5305\u4e3a\u4f8b\uff0c\u6df1\u5165\u6d45\u51fa\u5730\u8bb2\u89e3\u4e86 Builder \u6a21\u5f0f\u5728\u7ebf\u7a0b\u6c60\u4e2d\u7684\u6838\u5fc3\u4ef7\u503c\u3002<\/p>\n\n\n\n<p>\u539f\u751f JDK \u7ebf\u7a0b\u6c60\u7684\u6784\u9020\u65b9\u6cd5\u662f\u5178\u578b\u7684\u201c\u53cd\u4eba\u7c7b\u201d\u8bbe\u8ba1\uff0c\u4e3b\u8981\u4f53\u73b0\u5728\u4e24\u4e2a\u65b9\u9762\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u53c2\u6570\u4f9d\u8d56\u4e0e\u7ea6\u675f\uff08\u903b\u8f91\u70b8\u5f39\uff09<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u4f9d\u8d56\u5173\u7cfb<\/strong>\uff1amaximumPoolSize\u00a0\u5fc5\u987b\u5927\u4e8e\u7b49\u4e8e\u00a0corePoolSize\u3002<\/li>\n\n\n\n<li><strong>\u6570\u503c\u7ea6\u675f<\/strong>\uff1akeepAliveTime\u00a0\u5fc5\u987b\u5927\u4e8e 0\u3002<\/li>\n\n\n\n<li><strong>\u975e\u7a7a\u7ea6\u675f<\/strong>\uff1aworkQueue\u3001threadFactory\u00a0\u4e0d\u80fd\u4e3a null\u3002<\/li>\n\n\n\n<li><strong>\u75db\u70b9<\/strong>\uff1a\u5982\u679c\u4f60\u76f4\u63a5\u00a0new\uff0c\u4e00\u65e6\u4f20\u9519\u4e00\u4e2a\u53c2\u6570\uff08\u6bd4\u5982\u6838\u5fc3\u6570\u5199\u4e86 10\uff0c\u6700\u5927\u6570\u5199\u4e86 5\uff09\uff0c\u4ee3\u7801\u7f16\u8bd1\u65f6\u4e0d\u4f1a\u62a5\u9519\uff0c<strong>\u8fd0\u884c\u65f6\u624d\u4f1a\u629b\u5f02\u5e38<\/strong>\uff08IllegalArgumentException\uff09\u3002\u8fd9\u5c31\u50cf\u4f60\u586b\u4e86\u4e00\u5f20\u590d\u6742\u7684\u8868\u683c\uff0c\u63d0\u4ea4\u5230\u7a97\u53e3\u624d\u544a\u8bc9\u4f60\u7b2c\u4e00\u884c\u586b\u9519\u4e86\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u9ed8\u8ba4\u503c\u7684\u7f3a\u5931\uff08\u91cd\u590d\u52b3\u52a8\uff09<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5f88\u591a\u65f6\u5019\uff0c\u6211\u4eec\u53ea\u60f3\u6539\u4e00\u4e2a\u53c2\u6570\uff08\u6bd4\u5982\u53ea\u6539\u6838\u5fc3\u7ebf\u7a0b\u6570\uff09\uff0c\u4f46\u539f\u751f\u6784\u9020\u51fd\u6570\u5f3a\u8feb\u4f60\u628a\u5269\u4e0b 6 \u4e2a\u53c2\u6570\u90fd\u586b\u4e00\u904d\u3002<\/li>\n\n\n\n<li>\u4f60\u4e0d\u5f97\u4e0d\u624b\u52a8\u53bb\u00a0new LinkedBlockingQueue&lt;>()\uff0c\u624b\u52a8\u00a0new AbortPolicy()\uff0c\u4ee3\u7801\u7531\u4e8e\u5197\u4f59\u53d8\u5f97\u975e\u5e38\u4e11\u964b\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"489\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766046214-image-1024x489.png\" alt=\"\" class=\"wp-image-1487\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766046214-image-1024x489.png 1024w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766046214-image-300x143.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766046214-image-768x367.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766046214-image.png 1175w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u6e90\u7801\u6ce8\u91ca\u4e2d\u5982\u4f55\u89e3\u91ca\u6b64\u884c\u8be6\u89c1\u56fe\u7247<\/p>\n\n\n\n<p>Hutool \u7684\u00a0ExecutorBuilder\u00a0\u5145\u5f53\u4e86\u4e00\u4e2a\u667a\u80fd\u4e2d\u4ecb\u7684\u89d2\u8272\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. \u5206\u6b65\u586b\u5199\uff0c\u6682\u5b58\u72b6\u6001<\/h4>\n\n\n\n<p>\u5b83\u4e0d\u6025\u7740\u521b\u5efa\u771f\u6b63\u7684\u7ebf\u7a0b\u6c60\uff0c\u800c\u662f\u628a\u4f60\u7684\u8981\u6c42\u5148\u8bb0\u5728\u5c0f\u672c\u672c\u4e0a\uff08\u6210\u5458\u53d8\u91cf\uff09\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ExecutorBuilder \u5185\u90e8\u6301\u6709\u7684\u53d8\u91cf\nprivate int corePoolSize;\nprivate int maxPoolSize;\nprivate BlockingQueue&lt;Runnable> workQueue;\n\/\/ ...<\/code><\/pre>\n\n\n\n<p>\u5f53\u7528\u6237\u8c03\u7528\u00a0.build()\u00a0\u540eBuilder \u5f00\u59cb\u5de5\u4f5c\uff1a<\/p>\n\n\n\n<p>\u4f8b\u5982\uff1aHutool \u53ef\u4ee5\u5728\u00a0build()\u00a0\u91cc\u5224\u65ad\uff0c\u5982\u679c\u7528\u6237\u8bbe\u7f6e\u4e86\u00a0allowCoreThreadTimeOut(true)\uff0c\u90a3\u4e48\u5b83\u5fc5\u987b\u786e\u4fdd\u00a0keepAliveTime > 0\u3002<\/p>\n\n\n\n<p><strong>\u81ea\u52a8\u8865\u5168\u9ed8\u8ba4\u503c <\/strong>\u6587\u4e2d\u4ee3\u7801\uff1aif(null != builder.workQueue){...} else { ... }<\/p>\n\n\n\n<p>\u5982\u679c\u4f60\u6ca1\u4f20\u961f\u5217\uff0cBuilder \u8d34\u5fc3\u5730\u7ed9\u4f60\u521b\u5efa\u4e00\u4e2a\u9ed8\u8ba4\u7684\u00a0LinkedBlockingQueue\uff1b\u5982\u679c\u4f60\u6ca1\u4f20\u62d2\u7edd\u7b56\u7565\uff0c\u5b83\u9ed8\u8ba4\u7ed9\u4f60\u00a0AbortPolicy\u3002\u8fd9\u5c31\u6781\u5927\u5730\u964d\u4f4e\u4e86\u4f7f\u7528\u95e8\u69db\u3002<\/p>\n\n\n\n<p><strong>\u7edf\u4e00\u6821\u9a8c \u903b\u8f91\u6536\u53e3<\/strong>\uff1a\u867d\u7136\u6587\u4e2d\u7684\u00a0ExecutorBuilder\u00a0\u6700\u7ec8\u8fd8\u662f\u8c03\u7528\u4e86 JDK \u7684\u6784\u9020\u51fd\u6570\u6765\u505a\u6821\u9a8c\uff0c\u4f46 Builder \u6a21\u5f0f\u5141\u8bb8\u6211\u4eec\u5728\u8c03\u7528\u4e4b\u524d\u505a<strong>\u66f4\u9ad8\u7ea7\u7684\u6821\u9a8c<\/strong>\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u7b14\u8005\u7740\u91cd\u63d0\u5230\u4e24\u70b9\uff0cHutool \u7684\u4e24\u5904\u4eae\u70b9<\/p>\n\n\n\n<p>1. \u6cdb\u578b\u63a5\u53e3\u00a0Builder&lt;T><br><code>public interface Builder extends Serializable {<br>     T build();<br>}<\/code><\/p>\n\n\n\n<p>\u00a0Hutool \u4e3a\u4e86\u7edf\u4e00\u201c\u6784\u5efa\u884c\u4e3a\u201d\u800c\u5b9a\u4e49\u7684\u63a5\u53e3\u3002\u5982\u679c\u4f60\u7684\u7cfb\u7edf\u91cc\u6709\u5f88\u591a\u590d\u6742\u7684\u5bf9\u8c61\uff08\u7ebf\u7a0b\u6c60\u3001\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u3001HTTP\u8bf7\u6c42\uff09\uff0c\u4f60\u53ef\u4ee5\u8ba9\u5b83\u4eec\u7684\u6784\u5efa\u5668\u90fd\u5b9e\u73b0\u8fd9\u4e2a\u63a5\u53e3\u3002\u5728\u67d0\u4e9b\u9ad8\u7ea7\u573a\u666f\u4e0b\uff0c\u4f60\u53ef\u4ee5\u5199\u4e00\u4e2a\u65b9\u6cd5\u63a5\u6536\u00a0Builder&lt;ThreadPoolExecutor> builder\uff0c\u5ef6\u8fdf\u6784\u5efa\uff0c\u76f4\u5230\u771f\u6b63\u9700\u8981\u5bf9\u8c61\u65f6\u624d\u8c03\u7528\u00a0.build()\u3002<\/p>\n\n\n\n<p>2.create()\u00a0\u65b9\u6cd5\u8fd4\u56de\u00a0this\u00a0\u94fe\u5f0f\u8c03\u7528<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public static ExecutorBuilder create() {\n    return new ExecutorBuilder();\n}\n\npublic ExecutorBuilder setCorePoolSize(int corePoolSize) {\n    this.corePoolSize = corePoolSize;\n    return this; \/\/ \u8fd4\u56de\u5f53\u524d\u5bf9\u8c61\uff0c\u5b9e\u73b0\u94fe\u5f0f\u8c03\u7528\n}<\/code><\/pre>\n\n\n\n<p>\u8fd9\u662f\u5b9e\u73b0&nbsp;ExecutorBuilder.create().setX().setY().build()&nbsp;\u6d41\u7545\u8bed\u6cd5\u7684\u5173\u952e\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.nageoffer.onethread.core.toolkit;\n\n\/\/ \u4f60\u7684 Builder \u672c\u8d28\u4e0a\u5c31\u662f Hutool Builder \u7684\u601d\u60f3\uff0c\u4f46\u662f\u4e3a\u4e86\u7279\u5b9a\u7684\u4e1a\u52a1\uff08\u52a8\u6001\u7ebf\u7a0b\u6c60\uff09\u670d\u52a1\u7684\npublic class ThreadPoolExecutorBuilder implements Builder&lt;ThreadPoolExecutor> {\n    \n    \/\/ ... \u5c5e\u6027\u5b9a\u4e49 ...\n\n    public static ThreadPoolExecutorBuilder create() {\n        return new ThreadPoolExecutorBuilder();\n    }\n\n    \/\/ ... set \u65b9\u6cd5 ...\n\n    @Override\n    public ThreadPoolExecutor build() {\n        \/\/ 1. \u9ed8\u8ba4\u503c\u515c\u5e95 (\u7c7b\u4f3c Hutool)\n        if (workQueue == null) { ... }\n        \n        \/\/ 2. \u6838\u5fc3\u4e1a\u52a1\u5206\u652f\n        if (dynamicPool) {\n             \/\/ \u521b\u5efa\u5e26\u76d1\u63a7\u3001\u5e26ID\u7684\u52a8\u6001\u7ebf\u7a0b\u6c60\n             return new OneThreadExecutor(threadPoolId, ...);\n        } else {\n             \/\/ \u521b\u5efa\u666e\u901a\u7ebf\u7a0b\u6c60\n             return new ThreadPoolExecutor(...);\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u89e3\u51b3<strong>\u5982\u4f55\u6839\u636e\u4e00\u4e2a\u5e03\u5c14\u503c (dynamicPool) \u52a8\u6001\u51b3\u5b9a\u521b\u5efa\u54ea\u79cd\u7ebf\u7a0b\u6c60\u5bf9\u8c61<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>JDK \u7ebf\u7a0b\u6c60\u7684\u95ee\u9898\u75db\u70b9\u96be\u9898\u662f\u53ea\u8981\u4f60\u7528\u7ebf\u7a0b\u6c60\uff0c\u5c31\u52bf\u5fc5\u4f1a\u9047\u5230\u8fd9\u51e0\u9053\u95ee\u9898 \u75db\u70b9 \u672c\u8d28\u5f52\u56e0 oneThread \u8bbe\u8ba1\u6307\u9488 \u7ebf\u7a0b\u6c60\u968f\u610f n &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[3],"tags":[19,20],"class_list":["post-1464","post","type-post","status-publish","format-standard","hentry","category-3","tag-java","tag-20"],"_links":{"self":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1464"}],"version-history":[{"count":28,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1464\/revisions"}],"predecessor-version":[{"id":1495,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1464\/revisions\/1495"}],"wp:attachment":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}