{"id":1620,"date":"2025-12-26T21:17:52","date_gmt":"2025-12-26T13:17:52","guid":{"rendered":"https:\/\/eve2333.top\/?p=1620"},"modified":"2025-12-26T21:18:05","modified_gmt":"2025-12-26T13:18:05","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%b9%9d%e9%83%a8%e5%88%86-%e7%ba%bf%e7%a8%8b%e6%b1%a0%e5%91%8a%e8%ad%a6%e9%83%a8%e5%88%86","status":"publish","type":"post","link":"https:\/\/eve2333.top\/?p=1620","title":{"rendered":"\u52a8\u6001\u7ebf\u7a0b\u6c60oneThread\u7cfb\u7edf \u2014 \u7b2c\u4e5d\u90e8\u5206 \u7ebf\u7a0b\u6c60\u544a\u8b66\u90e8\u5206"},"content":{"rendered":"\n<p>\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u5178\u578b\u7684\u4e2d\u95f4\u4ef6\u5f00\u53d1\u573a\u666f\uff1a<strong>\u5982\u4f55\u5bf9\u201c\u9ed1\u76d2\u201d\u7684\u7ebf\u7a0b\u6c60\u8fdb\u884c\u900f\u660e\u5316\u7684\u76d1\u63a7\u548c\u6cbb\u7406<\/strong>\u3002<\/p>\n\n\n\n<p>\u7ed3\u5408\u4f60\u63d0\u4f9b\u7684\u9879\u76ee\u76ee\u5f55\u7ed3\u6784\u548c\u6587\u7ae0\u5185\u5bb9\uff0c\u6211\u5c06\u4e3a\u4f60\u68b3\u7406\u51fa\u6838\u5fc3\u77e5\u8bc6\u70b9\u3001\u4ee3\u7801\u843d\u5730\u4f4d\u7f6e\uff0c\u4ee5\u53ca\u5728\u9762\u8bd5\u4e2d\u5982\u4f55\u9ad8\u6c34\u5e73\u5730\u9610\u8ff0\u8fd9\u4e00\u673a\u5236\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e00\u3001 \u6838\u5fc3\u529f\u80fd\u6982\u8ff0 <\/h3>\n\n\n\n<p><strong>\u80cc\u666f\u4e0e\u75db\u70b9\uff1a<\/strong><br>\u539f\u751f JDK \u7ebf\u7a0b\u6c60\u662f\u201c\u9ed1\u76d2\u201d\u8fd0\u884c\u7684\u3002\u5f53\u751f\u4ea7\u73af\u5883\u51fa\u73b0\u63a5\u53e3\u8d85\u65f6\u6216 CPU \u98d9\u5347\u65f6\uff0c\u6211\u4eec\u5f80\u5f80\u4e0d\u77e5\u9053\u662f\u7ebf\u7a0b\u6c60\u6ee1\u4e86\u3001\u961f\u5217\u79ef\u538b\u4e86\uff0c\u8fd8\u662f\u5176\u4ed6\u539f\u56e0\u3002\u901a\u5e38\u7b49\u5230\u629b\u51fa <code>RejectedExecutionException<\/code> \u65f6\uff0c\u4e1a\u52a1\u5df2\u7ecf\u53d7\u635f\u3002<\/p>\n\n\n\n<p><strong>\u89e3\u51b3\u65b9\u6848\uff1a<\/strong><br><code>oneThread<\/code> \u6846\u67b6\u5f15\u5165\u4e86<strong>\u4e3b\u52a8\u5f0f\u5065\u5eb7\u5de1\u68c0\u673a\u5236<\/strong>\u3002\u901a\u8fc7\u4e00\u4e2a\u72ec\u7acb\u7684\u5b88\u62a4\u7ebf\u7a0b\uff08\u5355\u7ebf\u7a0b\u8c03\u5ea6\u5668\uff09\uff0c\u5b9a\u671f\uff08\u9ed8\u8ba4 5\u79d2\uff09\u8f6e\u8be2\u6240\u6709\u88ab\u6258\u7ba1\u7684\u7ebf\u7a0b\u6c60\uff0c\u8ba1\u7b97\u5176\u8d1f\u8f7d\u6307\u6807\u3002\u4e00\u65e6\u8d85\u8fc7\u914d\u7f6e\u9608\u503c\uff08\u5982\u6d3b\u8dc3\u5ea6 &gt; 80%\uff09\uff0c\u5373\u89e6\u53d1\u544a\u8b66\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e8c\u3001 \u4ee3\u7801\u4f4d\u7f6e\u6620\u5c04 (Code Mapping)<\/h3>\n\n\n\n<p>\u6839\u636e\u76ee\u5f55\u7ed3\u6784\u548c\u6587\u7ae0\u903b\u8f91\uff0c\u6838\u5fc3\u4ee3\u7801\u5206\u5e03\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u544a\u8b66\u68c0\u67e5\u5668 (\u6838\u5fc3\u903b\u8f91)<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u4f4d\u7f6e\uff1a<\/strong> <code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/alarm\/ThreadPoolAlarmChecker.java<\/code> (\u63a8\u6d4b\u6587\u4ef6\u540d\uff0c\u76ee\u5f55\u5728 <code>core\/alarm<\/code>)<\/li>\n\n\n\n<li><strong>\u4f5c\u7528\uff1a<\/strong> \u5305\u542b <code>ScheduledExecutorService<\/code>\uff0c\u6267\u884c <code>checkAlarm<\/code>\u3001<code>checkActiveRate<\/code>\u3001<code>checkQueueUsage<\/code> \u7b49\u6838\u5fc3\u903b\u8f91\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Spring \u96c6\u6210\u4e0e\u542f\u52a8<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u4f4d\u7f6e\uff1a<\/strong> <code>spring-base\/src\/main\/java\/com\/nageoffer\/onethread\/spring\/config\/OneThreadBaseConfiguration.java<\/code><\/li>\n\n\n\n<li><strong>\u4f5c\u7528\uff1a<\/strong> \u901a\u8fc7 <code>@Bean(initMethod = \"start\", destroyMethod = \"stop\")<\/code> \u5c06 <code>ThreadPoolAlarmChecker<\/code> \u6ce8\u518c\u4e3a Bean\uff0c\u5e76\u8ddf\u968f Spring \u5bb9\u5668\u542f\u52a8\/\u5173\u95ed\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u7ebf\u7a0b\u6c60\u6ce8\u518c\u4e2d\u5fc3<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u4f4d\u7f6e\uff1a<\/strong> <code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/OneThreadRegistry.java<\/code><\/li>\n\n\n\n<li><strong>\u4f5c\u7528\uff1a<\/strong> \u5b58\u50a8\u4e86\u6240\u6709 <code>ThreadPoolExecutorHolder<\/code>\uff0c\u68c0\u67e5\u5668\u901a\u8fc7\u904d\u5386\u8fd9\u4e2a\u6ce8\u518c\u8868\u6765\u83b7\u53d6\u6240\u6709\u9700\u8981\u76d1\u63a7\u7684\u7ebf\u7a0b\u6c60\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u914d\u7f6e\u4e0e\u5c5e\u6027<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u4f4d\u7f6e\uff1a<\/strong> <code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/ThreadPoolExecutorProperties.java<\/code><\/li>\n\n\n\n<li><strong>\u4f5c\u7528\uff1a<\/strong> \u5b9a\u4e49\u544a\u8b66\u9608\u503c\uff08\u5982 <code>activeThreshold<\/code>\u3001<code>queueThreshold<\/code>\uff09\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u544a\u8b66\u901a\u77e5<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u4f4d\u7f6e\uff1a<\/strong> <code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/notification\/service\/NotifierDispatcher.java<\/code> (\u63a8\u6d4b)<\/li>\n\n\n\n<li><strong>\u4f5c\u7528\uff1a<\/strong> <code>sendAlarmMessage<\/code> \u65b9\u6cd5\u6700\u7ec8\u8c03\u7528\u53d1\u9001\u903b\u8f91\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e09\u3001 \u8be6\u7ec6\u6280\u672f\u89e3\u6790<\/h3>\n\n\n\n<p>\u5728\u9762\u8bd5\u4e2d\uff0c\u4f60\u53ef\u4ee5\u5206\u4e09\u4e2a\u7ef4\u5ea6\u6765\u8bb2\u89e3\uff1a<strong>\u76d1\u63a7\u6307\u6807\u8bbe\u8ba1<\/strong>\u3001<strong>\u8c03\u5ea6\u673a\u5236\u5b9e\u73b0<\/strong>\u3001<strong>\u6027\u80fd\u4e0e\u5e76\u53d1\u8003\u8651<\/strong>\u3002<\/p>\n\n\n\n<p>\u5728 oneThread \u4e2d\uff0c\u6211\u4eec\u7ed3\u5408\u5927\u91cf\u9879\u76ee\u5b9e\u8df5\u4e0e\u544a\u8b66\u547d\u4e2d\u7387\uff0c\u6700\u7ec8\u63d0\u70bc\u51fa\u4e86\u4e09\u6761\u201c\u9ad8\u547d\u4e2d\u201d\u7684\u544a\u8b66\u7b56\u7565\uff0c\u5e76\u7ed9\u51fa\u9ed8\u8ba4\u7684\u89e6\u53d1\u9608\u503c\u4e0e\u5224\u5b9a\u903b\u8f91\uff0c\u8986\u76d6\u4e86<strong>\u6700\u5e38\u89c1\u7684\u7ebf\u7a0b\u6c60\u5f02\u5e38\u4f7f\u7528\u573a\u666f<\/strong>\u3002<\/p>\n\n\n\n<p>\u544a\u8b66\u7b56\u7565\u5982\u4e0b\u6240\u793a\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<h4 class=\"wp-block-heading\">1. \u76d1\u63a7\u6307\u6807\u8bbe\u8ba1 (Monitor Metrics)<\/h4>\n\n\n\n<p>\u6211\u4eec\u5173\u6ce8\u4e24\u4e2a\u6700\u80fd\u53cd\u6620\u7ebf\u7a0b\u6c60\u538b\u529b\u7684\u6307\u6807\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6d3b\u8dc3\u5ea6 (Liveness \/ Active Rate)\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\uff1a<\/strong> <code>(activeCount \/ maximumPoolSize) * 100<\/code><\/li>\n\n\n\n<li><strong>\u542b\u4e49\uff1a<\/strong> \u6b63\u5728\u5e72\u6d3b\u7684\u7ebf\u7a0b\u5360\u6700\u5927\u8d44\u6e90\u7684\u6bd4\u4f8b\u3002\u5982\u679c\u6301\u7eed\u7ef4\u6301\u5728 80% \u4ee5\u4e0a\uff0c\u8bf4\u660e\u7ebf\u7a0b\u6269\u5bb9\u5df2\u903c\u8fd1\u6781\u9650\uff0c\u6216\u8005\u4efb\u52a1\u5904\u7406\u8fc7\u6162\uff0c\u9700\u8981\u6269\u5bb9\u6216\u4f18\u5316\u4ee3\u7801\u3002<\/li>\n\n\n\n<li><strong>\u4ee3\u7801\u7ec6\u8282\uff1a<\/strong> \u83b7\u53d6 <code>activeCount<\/code> \u65f6\uff0cJDK \u7684 <code>ThreadPoolExecutor<\/code> \u4f1a\u52a0 <code>mainLock<\/code> \u9501\uff0c\u6240\u4ee5\u4e0d\u80fd\u592a\u9891\u7e41\u8c03\u7528\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u961f\u5217\u8d1f\u8f7d (Queue Capacity Usage)\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\uff1a<\/strong> <code>(queueSize \/ (queueSize + remainingCapacity)) * 100<\/code><\/li>\n\n\n\n<li><strong>\u542b\u4e49\uff1a<\/strong> \u4efb\u52a1\u79ef\u538b\u7a0b\u5ea6\u3002\u5982\u679c\u961f\u5217\u5feb\u6ee1\u4e86\uff0c\u4e0b\u4e00\u6b65\u5c31\u662f\u62d2\u7edd\u7b56\u7565\uff08\u4e22\u5f03\u4efb\u52a1\u6216\u629b\u5f02\u5e38\uff09\uff0c\u8fd9\u662f\u96ea\u5d29\u7684\u524d\u5146\u3002<\/li>\n\n\n\n<li><strong>\u6ce8\u610f\uff1a<\/strong> \u8ba1\u7b97\u5206\u6bcd\u65f6\u4f7f\u7528 <code>queueSize + remainingCapacity<\/code> \u662f\u4e3a\u4e86\u83b7\u53d6\u961f\u5217\u7684\u771f\u5b9e\u603b\u5bb9\u91cf\uff08\u56e0\u4e3a\u6709\u4e9b\u961f\u5217\u5bb9\u91cf\u662f\u52a8\u6001\u53ef\u8c03\u7684\uff09\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u7531\u4e8e\u7ebf\u7a0b\u6c60\u72b6\u6001\u76f8\u5173\u7684\u68c0\u67e5 API\uff08\u5982 <code>getActiveCount<\/code>\u7b49\uff09\u4f1a\u7ade\u4e89 <code>mainLock<\/code>\uff0c\u82e5\u5728\u9ad8\u9891\u573a\u666f\u4e0b\u8c03\u7528\uff0c\u53ef\u80fd\u5bf9\u4e1a\u52a1\u7ebf\u7a0b\u4ea7\u751f\u6027\u80fd\u5e72\u6270\u3002\u56e0\u6b64\uff0c\u7ebf\u7a0b\u6c60\u72b6\u6001\u76d1\u63a7\u901a\u5e38\u91c7\u7528\u5b9a\u65f6\u4efb\u52a1\u65b9\u5f0f\u8fdb\u884c\uff0c<strong>\u4ee5\u5ef6\u8fdf\u6362\u53d6\u4e1a\u52a1\u7a33\u5b9a\u6027<\/strong>\u3002\u6b64\u7c7b\u5b9a\u65f6\u68c0\u67e5\u65e0\u9700\u5f15\u5165\u989d\u5916\u6846\u67b6\uff0cJDK \u63d0\u4f9b\u7684 <code>ScheduledExecutorService<\/code> \u5df2\u80fd\u6ee1\u8db3\u7a33\u5b9a\u7684\u8c03\u5ea6\u9700\u6c42\u3002<\/p>\n\n\n\n<p><code>ThreadPoolAlarmChecker<\/code> \u5229\u7528\u4e00\u4e2a\u5355\u7ebf\u7a0b\u7684\u8c03\u5ea6\u5668\uff0c<strong>\u5b9a\u671f\u626b\u63cf\u7cfb\u7edf\u4e2d\u6240\u6709\u5df2\u6ce8\u518c\u7ebf\u7a0b\u6c60\u7684\u8fd0\u884c\u72b6\u6001<\/strong>\uff0c\u5e76\u9488\u5bf9\u542f\u7528\u4e86\u544a\u8b66\u7684\u7ebf\u7a0b\u6c60\u6267\u884c\u5404\u7c7b\u8fd0\u884c\u6307\u6807\u68c0\u6d4b\uff0c\u53ca\u65f6\u89e6\u53d1\u76f8\u5173\u544a\u8b66\u5904\u7406\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u6d3b\u8dc3\u5ea6\u544a\u8b66<\/h3>\n\n\n\n<p><code>checkActiveRate<\/code> \u4f1a\u76d1\u63a7\u7ebf\u7a0b\u6c60\u4e2d\u6d3b\u8dc3\u7ebf\u7a0b\u6570\u7684\u4f7f\u7528\u6bd4\u4f8b\uff0c<strong>\u5f53\u6d3b\u8dc3\u5ea6\u9ad8\u4e8e\u914d\u7f6e\u9608\u503c\u65f6\uff0c\u89e6\u53d1\u201cActivity\u201d\u7c7b\u578b\u7684\u544a\u8b66<\/strong>\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u53ca\u65f6\u53d1\u73b0\u7ebf\u7a0b\u6c60\u53ef\u80fd\u5b58\u5728\u201c\u7ebf\u7a0b\u8d44\u6e90\u8017\u5c3d\u201d\u6216\u201c\u5904\u7406\u80fd\u529b\u8fc7\u8f7d\u201d\u7684\u98ce\u9669\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4ee3\u7801\u6267\u884c\u6d41\u7a0b\u5982\u4e0b\u6240\u793a\uff1a<\/li>\n\n\n\n<li>1.\u4ece ThreadPoolExecutorHolder \u4e2d\u83b7\u53d6\u5b9e\u9645\u7684\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\uff08ThreadPoolExecutor\uff09\u548c\u5bf9\u5e94\u7684\u914d\u7f6e\u5c5e\u6027\uff1b<\/li>\n\n\n\n<li>2.\u83b7\u53d6\u5f53\u524d\u7ebf\u7a0b\u6c60\u4e2d\u201c\u6b63\u5728\u6267\u884c\u4efb\u52a1\u201d\u7684\u7ebf\u7a0b\u6570\u3002\u8fd9\u662f\u4e00\u4e2a\u6709\u540c\u6b65\u9501\u7684\u8c03\u7528\uff0c\u9891\u7e41\u83b7\u53d6\u4f1a\u6709\u6027\u80fd\u5f00\u9500\uff0c\u6240\u4ee5\u5efa\u8bae\u5b9a\u65f6\u8c03\u5ea6\u800c\u975e\u9ad8\u9891\u8f6e\u8be2\u3002<\/li>\n\n\n\n<li>3.\u83b7\u53d6\u7ebf\u7a0b\u6c60\u7684\u6700\u5927\u7ebf\u7a0b\u6570\uff1b\u9632\u6b62\u9664\u4ee5 0 \u7684\u60c5\u51b5\uff0c\u8fd9\u91cc\u76f4\u63a5\u63d0\u524d return \u6389\u3002<\/li>\n\n\n\n<li>4.\u8ba1\u7b97\u6d3b\u8dc3\u7ebf\u7a0b\u7684\u4f7f\u7528\u7387\uff08\u767e\u5206\u6bd4\uff09\uff0c\u5982\u5f53\u524d\u6d3b\u8dc3\u7ebf\u7a0b\u4e3a 8\uff0c\u6700\u5927\u7ebf\u7a0b\u6570\u4e3a 10\uff0c\u5219 activeRate = 80\u3002<\/li>\n\n\n\n<li>5.\u83b7\u53d6\u914d\u7f6e\u4e2d\u8bbe\u5b9a\u7684\u201c\u6d3b\u8dc3\u5ea6\u544a\u8b66\u9608\u503c\u201d\uff08\u6bd4\u5982 80 \u6216 90\uff09\u3002<\/li>\n\n\n\n<li>6.\u5982\u679c\u6d3b\u8dc3\u7ebf\u7a0b\u4f7f\u7528\u7387\u8d85\u8fc7\uff08\u6216\u7b49\u4e8e\uff09\u8bbe\u5b9a\u9608\u503c\uff0c\u5c31\u8c03\u7528 sendAlarmMessage(...) \u65b9\u6cd5\uff0c\u89e6\u53d1 \u7ebf\u7a0b\u6d3b\u8dc3\u5ea6\u8fc7\u9ad8 \u7684\u62a5\u8b66\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u5bb9\u91cf\u544a\u8b66<\/h3>\n\n\n\n<p><code>checkQueueUsage<\/code> \u7528\u4e8e\u5b9e\u65f6\u76d1\u63a7\u7ebf\u7a0b\u6c60\u4efb\u52a1\u961f\u5217\u7684\u4f7f\u7528\u7387\uff0c<strong>\u5f53\u6392\u961f\u4efb\u52a1\u63a5\u8fd1\u6216\u8fbe\u5230\u5bb9\u91cf\u4e0a\u9650\u65f6\uff0c\u89e6\u53d1\u544a\u8b66<\/strong>\uff0c\u4ee5\u4fbf\u53ca\u65f6\u53d1\u73b0\u4efb\u52a1\u5806\u79ef\u6216\u7ebf\u7a0b\u5904\u7406\u80fd\u529b\u4e0d\u8db3\u7684\u95ee\u9898\u3002<\/p>\n\n\n\n<p>\u4ee3\u7801\u6267\u884c\u6d41\u7a0b\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1.\u83b7\u53d6\u5f53\u524d\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\u53ca\u5176\u914d\u7f6e\u9879\uff1b<\/li>\n\n\n\n<li>2.\u83b7\u53d6\u7ebf\u7a0b\u6c60\u7684\u4efb\u52a1\u961f\u5217\uff1b\u8ba1\u7b97\u5f53\u524d\u961f\u5217\u4e2d\u5df2\u6392\u961f\u7684\u4efb\u52a1\u6570\u91cf\uff08<code>queueSize<\/code>\uff09\uff1b<\/li>\n\n\n\n<li>3.\u4f7f\u7528 <code>queue.remainingCapacity()<\/code> \u83b7\u53d6<strong>\u5269\u4f59\u53ef\u63a5\u6536\u7684\u4efb\u52a1\u5bb9\u91cf<\/strong>\uff1b\u901a\u8fc7\u4e24\u8005\u76f8\u52a0\uff0c\u5f97\u51fa\u961f\u5217\u7684<strong>\u7406\u8bba\u603b\u5bb9\u91cf<\/strong>\u3002<\/li>\n\n\n\n<li>4.\u5b89\u5168\u9632\u5fa1\u4ee3\u7801\uff1a<strong>\u907f\u514d\u9664\u4ee5 0<\/strong> \u7684\u5f02\u5e38\u60c5\u51b5\uff08\u5982\u6781\u7aef\u60c5\u51b5\u4e0b\u961f\u5217\u5bb9\u91cf\u4e3a 0\uff09\u3002<\/li>\n\n\n\n<li>5.\u8ba1\u7b97\u5f53\u524d\u961f\u5217\u4f7f\u7528\u7387\uff0c\u7ed3\u679c\u4e3a\u767e\u5206\u6bd4\uff08\u5982 8 \/ 10 = 80%\uff09\u3002<\/li>\n\n\n\n<li>6.\u4ece\u914d\u7f6e\u4e2d\u83b7\u53d6\u961f\u5217\u4f7f\u7528\u7387\u7684\u544a\u8b66\u9608\u503c\uff0c\u6bd4\u5982 <code>80<\/code> \u8868\u793a\u961f\u5217\u4f7f\u7528\u7387\u8d85\u8fc7 80% \u65f6\u62a5\u8b66\u3002<\/li>\n\n\n\n<li>7.\u82e5\u5f53\u524d\u961f\u5217\u4f7f\u7528\u7387\u8d85\u51fa\u8bbe\u5b9a\u9608\u503c\uff0c\u89e6\u53d1\u4e00\u6761 <code>\"Capacity\"<\/code> \u7c7b\u578b\u7684\u62a5\u8b66\u6d88\u606f\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u76f8\u8f83\u4e8e\u7ebf\u7a0b\u6d3b\u8dc3\u5ea6\u68c0\u67e5\uff0c\u963b\u585e\u961f\u5217\u7684\u4f7f\u7528\u7387\u7edf\u8ba1\u4f9d\u8d56\u7684 API \u8f83\u4e3a\u8f7b\u91cf\uff0c\u5bf9\u4e1a\u52a1\u7ebf\u7a0b\u6027\u80fd\u5f71\u54cd\u53ef\u5ffd\u7565\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. \u8c03\u5ea6\u673a\u5236\u5b9e\u73b0 (Scheduling Mechanism)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8c03\u5ea6\u5668\u9009\u62e9\uff1a<\/strong> \u4f7f\u7528 <code>ScheduledExecutorService<\/code> (JDK)\uff0c\u914d\u7f6e\u4e3a<strong>\u5355\u7ebf\u7a0b<\/strong> (<code>Executors.newScheduledThreadPool(1)<\/code>).<\/li>\n\n\n\n<li><strong>\u8c03\u5ea6\u7b56\u7565\uff1a<\/strong> \u4f7f\u7528 <code>scheduleWithFixedDelay<\/code> \u800c\u4e0d\u662f <code>scheduleAtFixedRate<\/code>\u3002\n<ul class=\"wp-block-list\">\n<li><strong>\u9762\u8bd5\u52a0\u5206\u9879\uff1a<\/strong> \u89e3\u91ca\u4e3a\u4ec0\u4e48\u8981\u7528 <code>FixedDelay<\/code>\u3002<\/li>\n\n\n\n<li><em>\u7406\u7531\uff1a<\/em> <code>FixedDelay<\/code> \u662f\u5728<strong>\u4e0a\u4e00\u6b21\u4efb\u52a1\u7ed3\u675f<\/strong>\u540e\u7b49\u5f85\u56fa\u5b9a\u7684\u65f6\u95f4\uff085\u79d2\uff09\u518d\u6267\u884c\u4e0b\u4e00\u6b21\u3002\u8fd9\u4fdd\u8bc1\u4e86\u5373\u4f7f\u67d0\u6b21\u68c0\u67e5\u8017\u65f6\u5f88\u4e45\uff08\u6bd4\u5982\u53d1\u544a\u8b66\u7f51\u7edc\u5361\u987f\uff09\uff0c\u4e5f\u4e0d\u4f1a\u5bfc\u81f4\u4efb\u52a1\u5806\u79ef\u6216\u591a\u7ebf\u7a0b\u5e76\u53d1\u68c0\u67e5\u540c\u4e00\u4e2a\u7ebf\u7a0b\u6c60\uff0c\u907f\u514d\u4e86\u81ea\u6211\u7ade\u4e89\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3. \u6027\u80fd\u4e0e\u5e76\u53d1\u8003\u8651 (Performance &amp; Safety)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9501\u7ade\u4e89\u95ee\u9898\uff1a<\/strong><br>JDK \u7684 <code>executor.getActiveCount()<\/code> \u548c <code>queue.size()<\/code> \u5e76\u975e\u5b8c\u5168\u65e0\u9501\u64cd\u4f5c\uff08\u90e8\u5206\u5b9e\u73b0\u6301\u6709 <code>mainLock<\/code>\uff09\u3002\n<ul class=\"wp-block-list\">\n<li><em>\u7b56\u7565\uff1a<\/em> \u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u9009\u62e9<strong>\u4f4e\u9891\u5b9a\u65f6\u8f6e\u8be2<\/strong>\uff085\u79d2\u4e00\u6b21\uff09\uff0c\u800c\u4e0d\u662f\u5728\u4efb\u52a1\u63d0\u4ea4\u65f6\u5b9e\u65f6\u8ba1\u7b97\u3002\u4ee5\u6781\u5c0f\u7684\u5ef6\u8fdf\uff08\u76d1\u63a7\u6ede\u540e\uff09\u6362\u53d6\u4e1a\u52a1\u7ebf\u7a0b\u7684\u7edd\u5bf9\u6027\u80fd\u5b89\u5168\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5f02\u5e38\u9694\u79bb\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li><em>\u7b56\u7565\uff1a<\/em> \u68c0\u67e5\u5668\u5185\u90e8\u5fc5\u987b\u8fdb\u884c <code>try-catch<\/code> \u5305\u88f9\u3002<\/li>\n\n\n\n<li><em>\u7406\u7531\uff1a<\/em> \u5982\u679c\u67d0\u4e2a\u7ebf\u7a0b\u6c60\u7684\u72b6\u6001\u5f02\u5e38\uff08\u4f8b\u5982\u5df2\u88ab\u9500\u6bc1\u4f46\u672a\u6ce8\u9500\uff09\uff0c\u629b\u51fa\u7684\u5f02\u5e38\u4e0d\u80fd\u4e2d\u65ad\u8c03\u5ea6\u7ebf\u7a0b\uff0c\u5426\u5219\u6574\u4e2a\u7cfb\u7edf\u7684\u76d1\u63a7\u90fd\u4f1a\u6302\u6389\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u5728\u5b9a\u65f6\u6267\u884c <code>checkAlarm()<\/code> \u7684\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u67d0\u4e2a\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\u72b6\u6001\u5f02\u5e38\u3001\u914d\u7f6e\u9519\u8bef\uff0c\u6216\u5185\u90e8\u68c0\u67e5\u903b\u8f91\u629b\u51fa\u672a\u6355\u83b7\u5f02\u5e38\uff0c<strong>\u5f88\u53ef\u80fd\u4f1a\u5bfc\u81f4\u672c\u6b21\u68c0\u67e5\u4efb\u52a1\u4e2d\u65ad\u751a\u81f3\u6574\u4e2a\u5b9a\u65f6\u8c03\u5ea6\u5668\u5d29\u6e83\u9000\u51fa<\/strong>\u3002\u4e00\u65e6\u8c03\u5ea6\u5668\u505c\u6b62\uff0c\u7ebf\u7a0b\u6c60\u544a\u8b66\u673a\u5236\u5c06\u5931\u6548\uff0c\u540e\u7eed\u8fd0\u884c\u72b6\u6001\u5f02\u5e38\u5c06\u65e0\u6cd5\u88ab\u53ca\u65f6\u611f\u77e5\u548c\u4e0a\u62a5\uff0c<strong>\u5f62\u6210\u76d1\u63a7\u76f2\u533a<\/strong>\u3002<\/p>\n\n\n\n<p>\u4e3a\u907f\u514d\u8fd9\u79cd\u60c5\u51b5\uff0c<code>ThreadPoolAlarmChecker<\/code> \u5185\u90e8\u53ef\u4ee5\u91c7\u7528\u5c06\u6240\u6709\u68c0\u67e5\u903b\u8f91\u5305\u88f9\u5728\u7edf\u4e00\u7684\u5f02\u5e38\u4fdd\u62a4\u5757\u4e2d\uff0c\u786e\u4fdd\u5355\u6b21\u4efb\u52a1\u5931\u8d25\u4e0d\u4f1a\u5f71\u54cd\u8c03\u5ea6\u5668\u7684\u5b58\u6d3b\u6027\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> private void checkAlarm() {\n    try {\n        Collection&lt;ThreadPoolExecutorHolder&gt; holders = OneThreadRegistry.getAllHolders();\n        for (ThreadPoolExecutorHolder holder : holders) {\n            if (holder.getExecutorProperties().getAlarm().getEnable()) {\n                checkQueueUsage(holder);\n                checkActiveRate(holder);\n                \/\/ ...\n            }\n        }\n    } catch (Throwable t) {\n        log.error(\"&#91;oneThread] \u7ebf\u7a0b\u6c60\u544a\u8b66\u68c0\u67e5\u5f02\u5e38\", t);\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u4f7f\u7528 <code>try-catch<\/code> \u6355\u83b7 <code>Throwable<\/code>\uff0c\u53ef\u4ee5\u9632\u6b62\u5305\u62ec\u8fd0\u884c\u65f6\u5f02\u5e38\u548c\u9519\u8bef\u5728\u5185\u7684\u6240\u6709\u5f02\u5e38\u4e2d\u65ad\u8c03\u5ea6\u7ebf\u7a0b\u3002<\/p>\n\n\n\n<p>\u5728\u6781\u7aef\u60c5\u51b5\u4e0b\uff0c\u5373\u4f7f\u67d0\u4e2a\u7ebf\u7a0b\u6c60\u672c\u8eab\u5df2\u88ab\u9500\u6bc1\u6216\u72b6\u6001\u4e0d\u6b63\u5e38\uff0c\u4e5f\u4e0d\u5e94\u8be5\u8ba9\u6574\u4e2a\u76d1\u63a7\u4efb\u52a1\u5d29\u76d8\uff0c\u800c\u5e94\u901a\u8fc7\u65e5\u5fd7\u8bb0\u5f55\u548c\u544a\u8b66\u63d0\u793a\u6765\u66b4\u9732\u95ee\u9898\u3002\u5fc5\u8981\u65f6\u4e5f\u53ef\u4ee5\u5bf9\u8c03\u5ea6\u5668\u81ea\u8eab\u505a\u5065\u5eb7\u68c0\u67e5\uff0c\u786e\u4fdd\u5b83\u59cb\u7ec8\u5728\u7ebf\u8fd0\u884c\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u8fd9\u91cc\u793a\u4f8b\u4e2d\u4f7f\u7528\u7684\u662f\u6574\u4f53\u7684 try-catch\uff0c\u5176\u5b9e\u4e5f\u53ef\u4ee5\u5728\u5177\u4f53\u65b9\u6cd5\u5185\u90e8\u52a0 try\uff0c\u7c92\u5ea6\u66f4\u7ec6\u3002\u54b1\u4eec\u8fd9\u8fb9\u6ca1\u6709\u5728\u5916\u5c42\u989d\u5916\u52a0 try\uff0c\u662f\u56e0\u4e3a\u4ece\u6574\u4f53\u903b\u8f91\u6765\u770b\uff0c\u53ea\u6709\u544a\u8b66\u53d1\u9001\u90a3\u90e8\u5206\u53ef\u80fd\u629b\u5f02\u5e38\uff0c\u800c\u5e95\u5c42\u5df2\u7ecf\u505a\u4e86 try-catch \u5904\u7406\uff0c\u4e0d\u4f1a\u5f71\u54cd\u4e0a\u5c42\u903b\u8f91\u3002<\/p>\n\n\n\n<p>\u4f46\u5982\u679c\u4f60\u8c03\u7528\u7684\u662f\u5176\u4ed6\u4eba\u7684\u63a5\u53e3\uff0c\u5efa\u8bae\u8fd8\u662f\u52a0\u4e0a\u5fc5\u8981\u7684\u5f02\u5e38\u4fdd\u62a4\uff0c\u907f\u514d\u5f71\u54cd\u6574\u4e2a\u8c03\u5ea6\u4efb\u52a1\u7684\u6b63\u5e38\u8fd0\u884c\u3002<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u56db\u3001 \u9762\u8bd5 Q&amp;A \u6a21\u62df<\/h3>\n\n\n\n<p><strong>\u9762\u8bd5\u5b98\uff1a\u5982\u679c\u6211\u7684\u7cfb\u7edf\u91cc\u6709\u51e0\u767e\u4e2a\u52a8\u6001\u7ebf\u7a0b\u6c60\uff0c\u8fd9\u4e2a\u5355\u7ebf\u7a0b\u68c0\u67e5\u5668\u80fd\u625b\u5f97\u4f4f\u5417\uff1f<\/strong><\/p>\n\n\n\n<p><strong>\u4f60\u7684\u56de\u7b54\uff1a<\/strong><br>\"\u8fd9\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u6269\u5c55\u6027\u95ee\u9898\u3002\u5728\u5f53\u524d\u8bbe\u8ba1\u4e2d\uff0c\u5355\u7ebf\u7a0b\u662f\u8db3\u591f\u7684\u3002<br>\u9996\u5148\uff0c\u68c0\u67e5\u903b\u8f91\u975e\u5e38\u8f7b\u91cf\uff0c\u4ec5\u4ec5\u662f\u51e0\u4e2a\u5185\u5b58\u53d8\u91cf\u7684\u8bfb\u53d6\u548c\u7b80\u5355\u7684\u9664\u6cd5\u8fd0\u7b97\uff0c\u904d\u5386\u51e0\u767e\u4e2a\u5bf9\u8c61\u8017\u65f6\u6781\u77ed\uff08\u6beb\u79d2\u7ea7\uff09\u3002<br>\u5176\u6b21\uff0c\u901a\u8fc7 <code>scheduleWithFixedDelay<\/code> \u673a\u5236\uff0c\u5373\u4f7f\u904d\u5386\u8017\u65f6\u7a0d\u957f\uff0c\u4e5f\u53ea\u662f\u63a8\u8fdf\u4e86\u4e0b\u4e00\u6b21\u68c0\u67e5\u7684\u65f6\u95f4\uff0c\u4e0d\u4f1a\u9020\u6210\u4efb\u52a1\u79ef\u538b\u3002<br>\u5982\u679c\u672a\u6765\u771f\u7684\u8fbe\u5230\u4e0a\u5343\u4e2a\u7ebf\u7a0b\u6c60\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u68c0\u67e5\u5668\u6539\u4e3a\u591a\u7ebf\u7a0b\u5e76\u884c\u68c0\u67e5\uff0c\u6216\u8005\u5c06\u300e\u68c0\u67e5\u300f\u548c\u300e\u544a\u8b66\u53d1\u9001\u300f\u5f02\u6b65\u5316\uff08\u56e0\u4e3a\u53d1\u544a\u8b66\u6d89\u53ca IO\uff0c\u6bd4\u8f83\u8017\u65f6\uff09\uff0c\u5c06\u544a\u8b66\u4efb\u52a1\u4e22\u5230\u4e13\u95e8\u7684 IO \u7ebf\u7a0b\u6c60\u53bb\u5904\u7406\uff0c\u4fdd\u8bc1\u68c0\u6d4b\u7ebf\u7a0b\u7684\u9ad8\u6548\u6d41\u8f6c\u3002\"<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5f53\u7ebf\u7a0b\u6c60\u6570\u91cf\u8f83\u591a\u65f6\uff08\u4f8b\u5982\u6570\u5341\u4e2a\u751a\u81f3\u4e0a\u767e\u4e2a\uff09\uff0c\u786e\u5b9e\u53ef\u80fd\u5bf9\u544a\u8b66\u68c0\u67e5\u6027\u80fd\u63d0\u51fa\u4e00\u5b9a\u6311\u6218\u3002\u4f46\u4ece\u5b9e\u73b0\u5c42\u9762\u770b\uff0c\u8be5\u544a\u8b66\u68c0\u67e5\u5668\u5177\u6709\u5982\u4e0b\u51e0\u4e2a\u7279\u6027\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528\u5355\u7ebf\u7a0b\u5b9a\u65f6\u8c03\u5ea6\u5668\u6267\u884c\u6240\u6709\u544a\u8b66\u903b\u8f91<\/strong>\uff0c\u907f\u514d\u5728\u9ad8\u5e76\u53d1\u573a\u666f\u4e2d\u5bf9\u4e1a\u52a1\u7ebf\u7a0b\u4ea7\u751f\u5e72\u6270\u3002<\/li>\n\n\n\n<li><strong>\u6307\u6807\u91c7\u96c6\u8fc7\u7a0b\u5c3d\u91cf\u4f7f\u7528\u8f7b\u91cf\u7ea7 API<\/strong>\uff0c\u5982 <code>getActiveCount()<\/code> \uff0c\u867d\u7136\u90e8\u5206\u63a5\u53e3\u6301\u6709 <code>mainLock<\/code>\uff0c\u4f46\u6574\u4f53\u9891\u7387\u8f83\u4f4e\u3002<\/li>\n\n\n\n<li><strong>\u6bcf\u6b21\u68c0\u67e5\u672c\u8d28\u4e0a\u662f\u4e00\u6b21\u904d\u5386 + \u7edf\u8ba1\u8ba1\u7b97<\/strong>\uff0c\u5373\u4f7f\u7ebf\u7a0b\u6c60\u8f83\u591a\uff0c\u4e5f\u4e0d\u4f1a\u4ea7\u751f\u660e\u663e\u7684 CPU \u6216\u5185\u5b58\u538b\u529b\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u7efc\u4e0a\u6240\u8ff0\uff0c<strong>\u53ea\u8981\u5408\u7406\u914d\u7f6e\u68c0\u67e5\u9891\u7387\u548c\u544a\u8b66\u542f\u7528\u7b56\u7565\uff0c\u5373\u4fbf\u7cfb\u7edf\u4e2d\u5b58\u5728\u5927\u91cf\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\uff0c\u544a\u8b66\u673a\u5236\u4e5f\u4e0d\u4f1a\u5bf9\u4e1a\u52a1\u7cfb\u7edf\u9020\u6210\u660e\u663e\u6027\u80fd\u5f71\u54cd<\/strong>\u3002\u5bf9\u4e8e\u6027\u80fd\u548c\u51c6\u786e\u6027\u8981\u6c42\u66f4\u9ad8\u7684\u573a\u666f\uff0c\u8fd8\u53ef\u4ee5\u8fdb\u4e00\u6b65\u5f15\u5165\u4f18\u5316\u624b\u6bb5\uff0c\u4f8b\u5982\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c06\u544a\u8b66\u5904\u7406\u903b\u8f91\u5f02\u6b65\u5316\uff0c\u907f\u514d\u963b\u585e\u68c0\u67e5\u7ebf\u7a0b\uff1b<\/li>\n\n\n\n<li>\u5f15\u5165\u4e13\u7528\u7ebf\u7a0b\u6c60\uff0c\u5bf9\u9700\u8981\u68c0\u67e5\u7684\u7ebf\u7a0b\u6c60\u7684\u72b6\u6001\u5e76\u53d1\u68c0\u67e5\u4e0e\u544a\u8b66\u53d1\u9001\uff1b<\/li>\n\n\n\n<li>\u914d\u5408\u76d1\u63a7\u7cfb\u7edf\u8fdb\u884c\u5f02\u6b65\u6307\u6807\u4e0a\u62a5\u548c\u9608\u503c\u544a\u8b66\u5224\u65ad\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u901a\u8fc7\u4e0a\u8ff0\u624b\u6bb5\uff0c\u53ef\u4ee5\u5728\u4fdd\u8bc1\u7cfb\u7edf\u7a33\u5b9a\u6027\u7684\u540c\u65f6\uff0c\u8fdb\u4e00\u6b65\u63d0\u5347\u544a\u8b66\u673a\u5236\u5728\u590d\u6742\u573a\u666f\u4e0b\u7684\u6269\u5c55\u80fd\u529b\u4e0e\u8fd0\u884c\u6548\u7387\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u9762\u8bd5\u5b98\uff1a\u4e3a\u4ec0\u4e48\u8981\u663e\u5f0f\u8c03\u7528 start() \u65b9\u6cd5\uff0c\u800c\u4e0d\u662f\u5728\u6784\u9020\u51fd\u6570\u91cc\u542f\u52a8\uff1f<\/strong><\/p>\n\n\n\n<p><strong>\u4f60\u7684\u56de\u7b54\uff1a<\/strong><br>\"\u8fd9\u662f\u4e3a\u4e86\u751f\u547d\u5468\u671f\u7684\u53ef\u63a7\u6027\u3002<br>\u5982\u679c\u5728\u6784\u9020\u51fd\u6570\u4e2d\u542f\u52a8\uff0c\u53ef\u80fd\u4f1a\u5728 Bean \u8fd8\u6ca1\u5b8c\u5168\u521d\u59cb\u5316\uff08\u4f8b\u5982\u4f9d\u8d56\u7684\u914d\u7f6e\u8fd8\u6ca1\u52a0\u8f7d\u5b8c\uff0c\u6216\u8005\u6ce8\u518c\u4e2d\u5fc3\u8fd8\u6ca1\u8fde\u63a5\u4e0a\uff09\u5c31\u5f00\u59cb\u6267\u884c\u68c0\u67e5\uff0c\u5bfc\u81f4\u7a7a\u6307\u9488\u6216\u8bef\u62a5\u3002<br>\u5229\u7528 Spring \u7684 <code>initMethod<\/code> \u6216 <code>SmartLifecycle<\/code> \u63a5\u53e3\uff0c\u53ef\u4ee5\u786e\u4fdd\u5728 Spring \u5bb9\u5668\u5b8c\u5168\u51c6\u5907\u597d\u4e4b\u540e\u518d\u5f00\u542f\u76d1\u63a7\uff0c\u8fd9\u662f\u66f4\u4f18\u96c5\u7684\u5de5\u7a0b\u5b9e\u8df5\u3002\"<\/p>\n\n\n\n<p><code>ThreadPoolAlarmChecker<\/code> \u5e76\u4e0d\u4f1a\u5728\u521b\u5efa\u65f6\u81ea\u52a8\u542f\u52a8\u544a\u8b66\u903b\u8f91\u3002\u4f60\u9700\u8981\u5728\u9879\u76ee\u521d\u59cb\u5316\u9636\u6bb5\uff0c<strong>\u663e\u5f0f\u8c03\u7528 <code>start()<\/code> \u65b9\u6cd5<\/strong>\uff0c\u4ee5\u542f\u52a8\u5b9a\u65f6\u68c0\u67e5\u4efb\u52a1\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5e38\u89c1\u505a\u6cd5\u5305\u62ec\u5728 SpringBoot \u9879\u76ee\u7684\u542f\u52a8\u56de\u8c03\uff08\u5982 <code>ApplicationRunner<\/code>\u3001<code>InitializingBean<\/code>\uff09\u4e2d\u8c03\u7528\uff1b\u8fd9\u6837\u53ef\u4ee5\u786e\u4fdd\u544a\u8b66\u903b\u8f91\u542f\u52a8\u65f6\uff0c\u7cfb\u7edf\u4e2d\u5df2\u7ecf\u5b58\u5728\u53ef\u68c0\u67e5\u7684\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\u3002<\/p>\n\n\n\n<p>\u5b9e\u9645\u4e0a\uff0c\u6211\u4eec\u4e5f\u662f\u91c7\u7528\u4e86\u76f8\u540c\u7684\u65b9\u5f0f\u6765\u7ba1\u7406\u7ebf\u7a0b\u6c60\u544a\u8b66\u68c0\u67e5\u7684\u751f\u547d\u5468\u671f\u3002\u5728 <code>spring-base<\/code> \u6a21\u5757\u4e2d\uff0c\u901a\u8fc7 <code>OneThreadBaseConfiguration<\/code> \u914d\u7f6e\u7c7b\u5b8c\u6210\u4e86\u544a\u8b66\u68c0\u67e5\u5668\u7684\u81ea\u52a8\u88c5\u914d\u4e0e\u8c03\u5ea6\u63a7\u5236\uff1a\u544a\u8b66\u68c0\u67e5\u5668\u7684\u88c5\u8f7d\u6d41\u7a0b\uff1a<\/p>\n\n\n\n<p>\u5229\u7528 <code>initMethod = \"start\"<\/code> \u548c <code>destroyMethod = \"stop\"<\/code>\uff0c\u5206\u522b\u5728 Bean \u521d\u59cb\u5316\u4e0e\u9500\u6bc1\u9636\u6bb5\u542f\u52a8\u548c\u505c\u6b62\u5b9a\u65f6\u68c0\u67e5\u4efb\u52a1\u3002<\/p>\n\n\n\n<p>\u901a\u8fc7 <code>@Bean<\/code> \u6ce8\u89e3\u5b9a\u4e49\u4e86 <code>ThreadPoolAlarmChecker<\/code> \u7684 Spring \u7ba1\u7406\u5bf9\u8c61\uff1b<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><code>oneThread<\/code> \u7684\u544a\u8b66\u673a\u5236\u901a\u8fc7 <strong>Spring \u6258\u7ba1\u7684\u5355\u7ebf\u7a0b\u8c03\u5ea6\u5668<\/strong>\uff0c\u4ee5 <strong>FixedDelay<\/strong> \u7684\u65b9\u5f0f<strong>\u4f4e\u9891\u8f6e\u8be2<\/strong>\u7ebf\u7a0b\u6c60\u7684 <strong>ActiveCount<\/strong> \u548c <strong>QueueSize<\/strong>\uff0c\u5229\u7528<strong>\u5feb\u7167\u6570\u636e<\/strong>\u8ba1\u7b97\u8d1f\u8f7d\u7387\uff0c\u5728\u5c3d\u91cf<strong>\u4e0d\u62a2\u5360\u4e1a\u52a1\u9501\u8d44\u6e90<\/strong>\u7684\u524d\u63d0\u4e0b\uff0c\u5b9e\u73b0\u4e86\u5bf9\u7ebf\u7a0b\u6c60\u5065\u5eb7\u72b6\u6001\u7684\u51c6\u5b9e\u65f6\u76d1\u63a7\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u57fa\u4e8e\u52a8\u6001\u4ee3\u7406\u6a21\u5f0f\u5b8c\u6210\u7ebf\u7a0b\u6c60\u62d2\u7edd\u7b56\u7565\u62a5\u8b66<\/h1>\n\n\n\n<p>\u4ec0\u4e48\u662f\u52a8\u6001\u4ee3\u7406\uff1f<\/p>\n\n\n\n<p>Mybatis \u5e95\u5c42\u5c01\u88c5\u4f7f\u7528\u7684 JDK \u52a8\u6001\u4ee3\u7406\u3002\u8bf4 Mybatis \u52a8\u6001\u4ee3\u7406\u4e4b\u524d\uff0c\u5148\u6765\u770b\u4e00\u4e0b\u5e73\u5e38\u6211\u4eec\u5199\u7684\u52a8\u6001\u4ee3\u7406 Demo\uff0c\u629b\u7816\u5f15\u7389<\/p>\n\n\n\n<p>\u4e00\u822c\u6765\u8bf4\u5b9a\u4e49 JDK \u52a8\u6001\u4ee3\u7406\u5206\u4e3a\u4e09\u4e2a\u6b65\u9aa4\uff0c\u5982\u4e0b\u6240\u793a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b9a\u4e49\u4ee3\u7406\u63a5\u53e3<\/li>\n\n\n\n<li>\u5b9a\u4e49\u4ee3\u7406\u63a5\u53e3\u5b9e\u73b0\u7c7b<\/li>\n\n\n\n<li>\u5b9a\u4e49\u52a8\u6001\u4ee3\u7406\u8c03\u7528\u5904\u7406\u5668<\/li>\n<\/ol>\n\n\n\n<p>\u4e09\u6b65\u4ee3\u7801\u5982\u4e0b\u6240\u793a\uff0c\u73a9\u8fc7\u52a8\u6001\u4ee3\u7406\u7684\u5c0f\u4f19\u4f34\u770b\u8fc7\u5c31\u80fd\u660e\u767d<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>public<\/strong>&nbsp;<strong>interface<\/strong>&nbsp;<strong>Subject<\/strong>&nbsp;{&nbsp;<em>\/\/&nbsp;\u5b9a\u4e49\u4ee3\u7406\u63a5\u53e3<\/em><br>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;<strong>sayHello<\/strong>();<br>}<br><br><strong>public<\/strong>&nbsp;<strong>class<\/strong>&nbsp;<strong>SubjectImpl<\/strong>&nbsp;<strong>implements<\/strong>&nbsp;<strong>Subject<\/strong>&nbsp;{&nbsp;&nbsp;<em>\/\/&nbsp;\u5b9a\u4e49\u4ee3\u7406\u63a5\u53e3\u5b9e\u73b0\u7c7b<\/em><br>&nbsp;&nbsp;&nbsp;&nbsp;<strong>@Override<\/strong><br>&nbsp;&nbsp;&nbsp;&nbsp;<strong>public<\/strong>&nbsp;String&nbsp;<strong>sayHello<\/strong>()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"&nbsp;Hello&nbsp;World\");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return<\/strong>&nbsp;\"success\";<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br><strong>public<\/strong>&nbsp;<strong>class<\/strong>&nbsp;<strong>ProxyInvocationHandler<\/strong>&nbsp;<strong>implements<\/strong>&nbsp;<strong>InvocationHandler<\/strong>&nbsp;{&nbsp;&nbsp;<em>\/\/&nbsp;\u5b9a\u4e49\u52a8\u6001\u4ee3\u7406\u8c03\u7528\u5904\u7406\u5668<\/em><br>&nbsp;&nbsp;&nbsp;&nbsp;<strong>private<\/strong>&nbsp;Object&nbsp;target;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<strong>public<\/strong>&nbsp;<strong>ProxyInvocationHandler<\/strong>(Object&nbsp;target)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>this<\/strong>.target&nbsp;=&nbsp;target;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<strong>@Override<\/strong><br>&nbsp;&nbsp;&nbsp;&nbsp;<strong>public<\/strong>&nbsp;Object&nbsp;<strong>invoke<\/strong>(Object&nbsp;proxy,&nbsp;Method&nbsp;method,&nbsp;Object&#91;]&nbsp;args)&nbsp;<strong>throws<\/strong>&nbsp;Throwable&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"&nbsp;\ud83e\uddf1&nbsp;\ud83e\uddf1&nbsp;\ud83e\uddf1&nbsp;\u8fdb\u5165\u4ee3\u7406\u8c03\u7528\u5904\u7406\u5668&nbsp;\");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return<\/strong>&nbsp;method.invoke(target,&nbsp;args);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<\/code><\/pre>\n\n\n\n<p>\u5199\u4e2a\u6d4b\u8bd5\u7a0b\u5e8f\uff0c\u8fd0\u884c\u4e00\u4e0b\u770b\u770b\u6548\u679c\uff0c\u540c\u6837\u662f\u5206\u4e09\u6b65<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u521b\u5efa\u88ab\u4ee3\u7406\u63a5\u53e3\u7684\u5b9e\u73b0\u7c7b<\/li>\n\n\n\n<li>\u521b\u5efa\u52a8\u6001\u4ee3\u7406\u7c7b\uff0c\u8bf4\u4e00\u4e0b\u4e09\u4e2a\u53c2\u6570\n<ul class=\"wp-block-list\">\n<li>\u7c7b\u52a0\u8f7d\u5668<\/li>\n\n\n\n<li>\u88ab\u4ee3\u7406\u7c7b\u6240\u5b9e\u73b0\u7684\u63a5\u53e3\u6570\u7ec4<\/li>\n\n\n\n<li>\u8c03\u7528\u5904\u7406\u5668\uff08\u8c03\u7528\u88ab\u4ee3\u7406\u7c7b\u65b9\u6cd5\uff0c\u6bcf\u6b21\u90fd\u7ecf\u8fc7\u5b83\uff09<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u88ab\u4ee3\u7406\u5b9e\u73b0\u7c7b\u8c03\u7528\u65b9\u6cd5<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>public<\/strong>&nbsp;<strong>class<\/strong>&nbsp;<strong>ProxyTest<\/strong>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;<strong>public<\/strong>&nbsp;<strong>static<\/strong>&nbsp;<strong>void<\/strong>&nbsp;<strong>main<\/strong>(String&#91;]&nbsp;args)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subject&nbsp;subject&nbsp;=&nbsp;<strong>new<\/strong>&nbsp;SubjectImpl();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subject&nbsp;proxy&nbsp;=&nbsp;(Subject)&nbsp;Proxy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.newProxyInstance(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.getClass().getClassLoader(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.getClass().getInterfaces(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>new<\/strong>&nbsp;ProxyInvocationHandler(subject));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy.sayHello();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>\/**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u6253\u5370\u8f93\u51fa\u5982\u4e0b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u8c03\u7528\u5904\u7406\u5668\uff1a\ud83e\uddf1&nbsp;\ud83e\uddf1&nbsp;\ud83e\uddf1&nbsp;\u8fdb\u5165\u4ee3\u7406\u8c03\u7528\u5904\u7406\u5668<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u88ab\u4ee3\u7406\u5b9e\u73b0\u7c7b\uff1aHello World<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/<\/em><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<\/code><\/pre>\n\n\n\n<p>Demo \u529f\u80fd\u5b9e\u73b0\u4e86\uff0c\u5927\u81f4\u8fd0\u884c\u6d41\u7a0b\u4e5f\u6e05\u695a\u4e86\uff0c\u4e0b\u9762\u8981\u9488\u5bf9\u539f\u7406\u5b9e\u73b0\u5c55\u5f00\u5206\u6790<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Subject\u00a0(\u63a5\u53e3)<\/strong>\uff1a\u5b9a\u4e49\u4e86\u4e00\u4e2a\u6807\u51c6\u6216\u89c4\u8303\u3002\u6bd4\u5982\u8fd9\u91cc\u89c4\u5b9a\u6709\u4e00\u4e2a\u00a0sayHello\u00a0\u7684\u52a8\u4f5c\u3002<\/li>\n\n\n\n<li><strong>SubjectImpl\u00a0(\u88ab\u4ee3\u7406\u7c7b\/\u76ee\u6807\u7c7b)<\/strong>\uff1a\u771f\u6b63\u5e72\u6d3b\u7684\u4eba\u3002\u5b83\u5b9e\u73b0\u4e86\u00a0Subject\uff0c\u5b83\u7684\u00a0sayHello\u00a0\u4f1a\u6253\u5370 \"Hello World\"\u3002<\/li>\n\n\n\n<li><strong>ProxyInvocationHandler\u00a0(\u8c03\u7528\u5904\u7406\u5668)<\/strong>\uff1a\u8fd9\u662f<strong>\u6700\u5173\u952e<\/strong>\u7684\u90e8\u5206\uff0c\u5b83\u662f\u201c\u4e2d\u95f4\u4eba\u201d\u7684\u5927\u8111\u3002\n<ul class=\"wp-block-list\">\n<li>\u5b83\u6301\u6709\u4e86\u00a0target\uff08\u4e5f\u5c31\u662f\u00a0SubjectImpl\u00a0\u7684\u5b9e\u4f8b\uff09\u3002<\/li>\n\n\n\n<li><strong>invoke\u00a0\u65b9\u6cd5<\/strong>\uff1a\u5f53\u5916\u754c\u901a\u8fc7\u4ee3\u7406\u5bf9\u8c61\u8c03\u7528\u4efb\u4f55\u65b9\u6cd5\u65f6\uff0c<strong>\u90fd\u4f1a\u88ab\u62e6\u622a\u5e76\u8f6c\u53d1\u5230\u8fd9\u91cc<\/strong>\u3002<\/li>\n\n\n\n<li>\u4ee3\u7801\u903b\u8f91\u662f\uff1a\u5148\u6253\u5370 \"\ud83e\uddf1 \ud83e\uddf1 \ud83e\uddf1 \u8fdb\u5165\u4ee3\u7406\u8c03\u7528\u5904\u7406\u5668\"\uff08\u641e\u5c0f\u52a8\u4f5c\uff09\uff0c\u7136\u540e\u901a\u8fc7\u00a0method.invoke(target, args)\u00a0\u8ba9\u771f\u6b63\u7684\u76ee\u6807\u7c7b\u53bb\u5e72\u6d3b\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>ProxyTest\u00a0(\u6d4b\u8bd5\/\u751f\u6210\u4ee3\u7406)<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>Proxy.newProxyInstance(...)\uff1a\u8fd9\u662f JDK \u7684\u9b54\u6cd5\u65b9\u6cd5\u3002\u5b83\u5728<strong>\u7a0b\u5e8f\u8fd0\u884c\u671f\u95f4<\/strong>\uff0c\u52a8\u6001\u5730\u5728\u5185\u5b58\u4e2d\u751f\u6210\u4e86\u4e00\u4e2a\u65b0\u7684\u7c7b\uff08\u4e5f\u5c31\u662f\u4ee3\u7406\u7c7b\uff09\u3002<\/li>\n\n\n\n<li>\u5f53\u4f60\u8c03\u7528\u00a0proxy.sayHello()\u00a0\u65f6\uff0c\u5e76\u4e0d\u662f\u76f4\u63a5\u8c03\u7528\u7684\u00a0SubjectImpl\uff0c\u800c\u662f\u8c03\u7528\u7684\u90a3\u4e2a\u5185\u5b58\u4e2d\u65b0\u751f\u6210\u7684\u4ee3\u7406\u7c7b\uff0c\u4ee3\u7406\u7c7b\u4f1a\u628a\u8bf7\u6c42\u8f6c\u7ed9\u00a0ProxyInvocationHandler\uff0cHandler \u518d\u51b3\u5b9a\u600e\u4e48\u5904\u7406\uff08\u52a0\u65e5\u5fd7\u3001\u9274\u6743\u7b49\uff09\uff0c\u6700\u540e\u624d\u8f6e\u5230\u00a0SubjectImpl\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u7528&nbsp;<strong>\u201c\u627e\u4e2d\u4ecb\u79df\u623f\u201d<\/strong>&nbsp;\u6765\u7c7b\u6bd4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Subject (\u63a5\u53e3)<\/strong>\uff1a<strong>\u201c\u51fa\u79df\u623f\u5c4b\u201d<\/strong>\u00a0\u8fd9\u4e2a\u52a8\u4f5c\u3002<\/li>\n\n\n\n<li><strong>SubjectImpl (\u88ab\u4ee3\u7406\u7c7b)<\/strong>\uff1a<strong>\u623f\u4e1c<\/strong>\u3002\u53ea\u6709\u623f\u4e1c\u624d\u6709\u771f\u6b63\u7684\u623f\u5b50\u53ef\u4ee5\u51fa\u79df\u3002<\/li>\n\n\n\n<li><strong>ProxyInvocationHandler (\u5904\u7406\u5668)<\/strong>\uff1a<strong>\u4e2d\u4ecb\u7684\u529e\u4e8b\u624b\u518c<\/strong>\u3002\u89c4\u5b9a\u4e86\u5728\u79df\u623f\u4e4b\u524d\u8981\u5e72\u4ec0\u4e48\uff08\u6bd4\u5982\u201c\u68c0\u67e5\u5f81\u4fe1\u201d\uff09\uff0c\u79df\u623f\u4e4b\u540e\u5e72\u4ec0\u4e48\uff08\u6bd4\u5982\u201c\u6536\u4e2d\u4ecb\u8d39\u201d\uff09\u3002<\/li>\n\n\n\n<li><strong>Proxy (\u4ee3\u7406\u5bf9\u8c61)<\/strong>\uff1a<strong>\u4e2d\u4ecb\u4eba\u5458<\/strong>\u3002<\/li>\n\n\n\n<li><strong>Client (\u6d4b\u8bd5\u4ee3\u7801)<\/strong>\uff1a<strong>\u79df\u5ba2\uff08\u4f60\uff09<\/strong>\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u6d41\u7a0b\u5bf9\u6bd4\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e0d\u4f7f\u7528\u4ee3\u7406<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u4f60\uff08Client\uff09 -> \u76f4\u63a5\u627e\u623f\u4e1c\uff08SubjectImpl\uff09 -> \u7b7e\u5408\u540c\u3002<\/li>\n\n\n\n<li><em>\u7f3a\u70b9<\/em>\uff1a\u623f\u4e1c\u5f88\u5fd9\uff0c\u4e0d\u60f3\u5904\u7406\u6742\u4e8b\uff0c\u6216\u8005\u4f60\u60f3\u5728\u7b7e\u5408\u540c\u524d\u5f3a\u5236\u52a0\u4e00\u4e2a\u201c\u80cc\u666f\u8c03\u67e5\u201d\u73af\u8282\uff0c\u6ca1\u6cd5\u52a0\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u4f7f\u7528\u52a8\u6001\u4ee3\u7406\uff08\u4ee3\u7801\u4e2d\u7684\u6d41\u7a0b\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u4f60\uff08Client\uff09\u627e\u5230\u4e86\u4e2d\u4ecb\uff08Proxy\uff09\u3002<\/li>\n\n\n\n<li>\u4f60\u8bf4\uff1a\u201c\u6211\u8981\u79df\u623f\uff08\u8c03\u7528\u00a0sayHello\uff09\u201d\u3002<\/li>\n\n\n\n<li>\u4e2d\u4ecb\u62ff\u51fa\u529e\u4e8b\u624b\u518c\uff08Handler\uff09\uff0c\u53d1\u73b0\u6d41\u7a0b\u662f\uff1a\n<ul class=\"wp-block-list\">\n<li>\u7b2c\u4e00\u6b65\uff1a\u5148\u558a\u4e00\u58f0 \"\ud83e\uddf1 \ud83e\uddf1 \ud83e\uddf1 \u8fdb\u5165\u4ee3\u7406\u8c03\u7528\u5904\u7406\u5668\"\uff08\u6bd4\u5982\uff1a\u5148\u67e5\u4f60\u7684\u5f81\u4fe1\uff09\u3002<\/li>\n\n\n\n<li>\u7b2c\u4e8c\u6b65\uff1a\u4e2d\u4ecb\u8054\u7cfb\u623f\u4e1c\uff08method.invoke(target)\uff09\uff0c\u623f\u4e1c\u628a\u623f\u5b50\u79df\u7ed9\u4f60\uff08\u6253\u5370 \"Hello World\"\uff09\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5bf9\u4f60\u6765\u8bf4<\/strong>\uff0c\u4f60\u611f\u89c9\u4f60\u662f\u76f4\u63a5\u79df\u5230\u4e86\u623f\u5b50\uff0c\u4f46\u5b9e\u9645\u4e0a\u4e2d\u4ecb\u5728\u4e2d\u95f4\u5939\u5e26\u4e86\u79c1\u8d27\uff08\u6253\u5370\u4e86\u65e5\u5fd7\uff09\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>\u7f3a\u70b9\u5728\u4e8e\uff1a\u5728\u4e0a\u9762\u7684 Demo \u4e2d\uff0c\u6211\u4eec\u6709\u4e00\u4e2a\u00a0SubjectImpl\u00a0(\u5b9e\u73b0\u7c7b)\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5fc5\u987b\u8981\u6709\u4e00\u4e2a\u771f\u6b63\u5e72\u6d3b\u7684\u201c\u623f\u4e1c\u201d\uff0c\u4ee3\u7406\u624d\u80fd\u5de5\u4f5c\u3002<\/strong><\/p>\n\n\n\n<p>\u5728\u5e38\u89c4 Demo \u4e2d\uff0cProxyInvocationHandler\u00a0\u91cc\u7684\u00a0invoke\u00a0\u6700\u7ec8\u6267\u884c\u7684\u662f\u00a0method.invoke(target, args)\u3002<br>\u4f46\u5728 MyBatis \u4e2d\uff0c\u5e76\u6ca1\u6709\u00a0target\u3002\u5b83\u7684\u00a0InvocationHandler\u00a0\u5b9e\u73b0\u7c7b\u53eb\u505a\u00a0<strong>MapperProxy<\/strong>\u3002JDK \u52a8\u6001\u4ee3\u7406\u5bf9\u8c61\u540d\u79f0\u662f\u6709\u89c4\u5219\u7684\uff0c\u51e1\u662f\u7ecf\u8fc7 Proxy \u7c7b\u751f\u6210\u7684\u52a8\u6001\u4ee3\u7406\u5bf9\u8c61\uff0c\u524d\u7f00\u5fc5\u7136\u662f\u00a0<strong>$Proxy<\/strong>\uff0c\u540e\u9762\u7684\u6570\u5b57\u4e5f\u662f\u540d\u79f0\u7ec4\u6210\u90e8<\/p>\n\n\n\n<p>\u5728&nbsp;MapperProxy.invoke&nbsp;\u65b9\u6cd5\u91cc\uff0c\u5b83\u4e0d\u662f\u53bb\u8c03\u7528\u67d0\u4e2a\u201c\u5b9e\u73b0\u7c7b\u201d\uff0c\u800c\u662f<strong>\u76f4\u63a5\u53bb\u6267\u884c SQL \u903b\u8f91<\/strong>\u3002<\/p>\n\n\n\n<p><strong>\u7528\u4e00\u53e5\u8bdd\u603b\u7ed3\u539f\u7406<\/strong> \uff0cMyBatis \u5e76\u4e0d\u9700\u8981\u4e00\u4e2a\u201c\u7269\u7406\u5b58\u5728\u201d\u7684\u5b9e\u73b0\u7c7b\uff08\u5982\u00a0UserMapperImpl\uff09\uff0c\u56e0\u4e3a\u5b83\u628a<strong>\u6267\u884c SQL \u7684\u901a\u7528\u903b\u8f91<\/strong>\uff08\u89e3\u6790\u53c2\u6570 -> \u67e5\u627e MappedStatement -> \u6267\u884c JDBC -> \u5c01\u88c5\u7ed3\u679c\uff09\u5199\u5728\u4e86\u00a0MapperProxy\u00a0\u8fd9\u4e2a\u8c03\u7528\u5904\u7406\u5668\u91cc\u3002<strong>\u63a5\u53e3\u662f\u58f3\uff0cMapperProxy \u662f\u9b42\u3002<\/strong><\/p>\n\n\n\n<p>\u6211\u4eec\u8c03\u7528\u00a0<code>Subject#sayHello<\/code>\u00a0\u65f6\uff0c\u65b9\u6cd5\u8c03\u7528\u94fe\u662f\u8fd9\u6837\u7684<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"806\" height=\"368\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766733324-image.png\" alt=\"\" class=\"wp-image-1655\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766733324-image.png 806w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766733324-image-300x137.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766733324-image-768x351.png 768w\" sizes=\"auto, (max-width: 806px) 100vw, 806px\" \/><\/figure>\n\n\n\n<p><strong>Mybatis Mapper \u4e3a\u4ec0\u4e48\u4e0d\u9700\u8981\u5b9e\u73b0\u7c7b\uff1f<\/strong>\u6211\u4eec\u9879\u76ee\u4f7f\u7528\u7684\u4e09\u5c42\u8bbe\u8ba1\uff0cController \u63a7\u5236\u8bf7\u6c42\u63a5\u6536\uff0cService \u8d1f\u8d23\u4e1a\u52a1\u5904\u7406\uff0cMapper \u8d1f\u8d23\u6570\u636e\u5e93\u4ea4\u4e92<\/p>\n\n\n\n<p>Mybatis \u5c06\u6240\u6709\u548c JDBC \u4ea4\u4e92\u7684\u64cd\u4f5c\uff0c\u5e95\u5c42\u91c7\u7528 JDK \u52a8\u6001\u4ee3\u7406\u5c01\u88c5\uff0c\u4f7f\u7528\u8005\u53ea\u9700\u8981\u81ea\u5b9a\u4e49 Mapper \u548c .xml \u6587\u4ef6\uff1bSQL \u8bed\u53e5\u5b9a\u4e49\u5728 .xml \u6587\u4ef6\u6216\u8005 Mapper \u4e2d\uff0c\u9879\u76ee\u542f\u52a8\u65f6\u901a\u8fc7\u89e3\u6790\u5668\u89e3\u6790 SQL \u8bed\u53e5\u7ec4\u88c5\u4e3a Java \u4e2d\u7684\u5bf9\u8c61<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u89e3\u6790\u5668\u5206\u4e3a\u591a\u79cd\uff0c\u56e0\u4e3a Mybatis \u4e2d\u4e0d\u4ec5\u6709\u9759\u6001\u8bed\u53e5\uff0c\u540c\u65f6\u4e5f\u5305\u542b\u52a8\u6001 SQL \u8bed\u53e5\uff1b\u8fd9\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48 Mapper \u63a5\u53e3\u4e0d\u9700\u8981\u5b9e\u73b0\u7c7b\uff0c<strong>\u56e0\u4e3a\u90fd\u5df2\u7ecf\u88ab Mybatis \u901a\u8fc7\u52a8\u6001\u4ee3\u7406\u5c01\u88c5\u4e86\uff0c\u5982\u679c\u6bcf\u4e2a Mapper \u90fd\u6765\u4e00\u4e2a\u5b9e\u73b0\u7c7b\uff0c\u81c3\u80bf\u4e14\u65e0\u7528<\/strong>\u3002\u7ecf\u8fc7\u8fd9\u4e00\u987f\u64cd\u4f5c\uff0c\u5c55\u793a\u7ed9\u6211\u4eec\u7684\u5c31\u662f\u9879\u76ee\u91cc\u7528\u5230\u7684 Mybatis \u6846\u67b6<\/p>\n<\/blockquote>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\u5f53\u4f60\u8c03\u7528\u00a0sqlSession.getMapper(UserMapper.class)\u00a0\u65f6\u53d1\u751f\u4e86\u4ec0\u4e48<\/h4>\n\n\n\n<p>\u901a\u5e38\u6211\u4eec\u8ba4\u4e3a\u7684\u52a8\u6001\u4ee3\u7406\u6d41\u7a0b\u662f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b9a\u4e49\u4e00\u4e2a\u63a5\u53e3\u3002<\/li>\n\n\n\n<li>\u5199\u4e00\u4e2a\u8be5\u63a5\u53e3\u7684\u5b9e\u73b0\u7c7b\uff08\u88ab\u4ee3\u7406\u5bf9\u8c61\uff09\u3002<\/li>\n\n\n\n<li>\u521b\u5efa\u4ee3\u7406\u5bf9\u8c61\uff0c\u8c03\u7528\u4ee3\u7406\u5bf9\u8c61\u7684\u65b9\u6cd5\u65f6\uff0c\u6700\u7ec8\u4f1a\u53cd\u5c04\u8c03\u7528\u5b9e\u73b0\u7c7b\u7684\u65b9\u6cd5\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>\u4f46\u5728 MyBatis \u4e2d\uff0c\u53ea\u6709\u63a5\u53e3\uff08Mapper\uff09\uff0c\u6ca1\u6709\u5b9e\u73b0\u7c7b\u3002<\/strong><\/p>\n\n\n\n<p>JDK \u7684&nbsp;Proxy.newProxyInstance&nbsp;\u65b9\u6cd5\u5176\u5b9e\u5e76\u4e0d\u5f3a\u5236\u8981\u6c42\u6709\u4e00\u4e2a\u201c\u88ab\u4ee3\u7406\u7684<strong>\u5bf9\u8c61<\/strong>\u201d\uff0c\u5b83\u53ea\u9700\u8981\u77e5\u9053<strong>\u63a5\u53e3<\/strong>\u662f\u4ec0\u4e48\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4f20\u7edf\u6a21\u5f0f<\/strong>\uff1aInvocationHandler\u00a0\u91cc\u6301\u6709\u88ab\u4ee3\u7406\u5bf9\u8c61\u7684\u5f15\u7528\uff0cinvoke \u65b9\u6cd5\u91cc\u6267\u884c\u00a0method.invoke(target, args)\u3002<\/li>\n\n\n\n<li><strong>MyBatis \u6a21\u5f0f\uff08\u65e0\u5b9e\u73b0\u7c7b\uff09<\/strong>\uff1aInvocationHandler\uff08\u5373 MyBatis \u4e2d\u7684\u00a0MapperProxy\uff09\u91cc<strong>\u6ca1\u6709<\/strong>\u88ab\u4ee3\u7406\u5bf9\u8c61\u3002\u5f53\u63a5\u53e3\u65b9\u6cd5\u88ab\u8c03\u7528\u65f6\uff0cinvoke \u65b9\u6cd5\u76f4\u63a5\u62e6\u622a\u903b\u8f91\uff0c\u53bb\u6267\u884c SQL \u64cd\u4f5c\uff08\u89e3\u6790 XML\u3001\u6267\u884c JDBC\uff09\uff0c\u5e76\u76f4\u63a5\u8fd4\u56de\u7ed3\u679c\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u53ea\u8981\u6709\u63a5\u53e3\u7684\u00a0Class\u00a0\u5bf9\u8c61\uff0cJDK \u5c31\u53ef\u4ee5\u751f\u6210\u4ee3\u7406\u7c7b\u3002\u6709\u6ca1\u6709\u5b9e\u73b0\u7c7b\uff0c\u53ea\u51b3\u5b9a\u4e86\u00a0invoke\u00a0\u65b9\u6cd5\u91cc\u662f\u201c\u8f6c\u53d1\u8c03\u7528\u201d\u8fd8\u662f\u201c\u76f4\u63a5\u5e72\u6d3b\u201d\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"539\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766734487-image-1024x539.png\" alt=\"\" class=\"wp-image-1659\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766734487-image-1024x539.png 1024w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766734487-image-300x158.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766734487-image-768x404.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766734487-image.png 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u89e3\u6790 Namespace<\/strong>\uff1a<br>MyBatis \u89e3\u6790 Mapper XML \u6587\u4ef6\u65f6\uff0c\u8bfb\u53d6\u00a0&lt;mapper namespace=\"org...AutoConstructorMapper\">\u00a0\u4e2d\u7684\u00a0namespace\u00a0\u5c5e\u6027\u3002\u8fd9\u4e2a\u5b57\u7b26\u4e32\u5c31\u662f\u63a5\u53e3\u7684\u5168\u9650\u5b9a\u540d\u3002<\/li>\n\n\n\n<li><strong>\u53cd\u5c04\u83b7\u53d6 Class<\/strong>\uff1a<br>\u4ee3\u7801\u903b\u8f91\u00a0Resources.classForName(namespace)\u3002<br>\u5229\u7528 Java \u53cd\u5c04\u673a\u5236\uff0c\u901a\u8fc7\u5b57\u7b26\u4e32\u62ff\u5230\u63a5\u53e3\u5bf9\u5e94\u7684\u00a0Class&lt;?>\u00a0\u5bf9\u8c61\u3002Mybatis \u4f7f\u7528\u63a5\u53e3\u5168\u9650\u5b9a\u540d\u901a\u8fc7\u00a0<code>Class#forName<\/code>\u00a0\u751f\u6210 Class \u5bf9\u8c61\uff0c\u8fd9\u4e2a Class \u5bf9\u8c61\u7c7b\u578b\u5c31\u662f\u63a5\u53e3<\/li>\n\n\n\n<li><strong>\u6ce8\u518c Mapper<\/strong>\uff1a<br>\u62ff\u5230\u00a0Class\u00a0\u5bf9\u8c61\u540e\uff0cMyBatis \u628a\u5b83\u4e22\u8fdb\u00a0MapperRegistry\uff08\u914d\u7f6e\u4e2d\u5fc3\uff09\u3002\u6b64\u65f6\uff0cMyBatis \u77e5\u9053\u4e86\u8fd9\u4e2a\u63a5\u53e3\u7684\u5b58\u5728\u3002<\/li>\n\n\n\n<li><strong>\u751f\u6210\u4ee3\u7406<\/strong>\uff1a<br>\u5f53\u4f60\u8c03\u7528\u00a0sqlSession.getMapper(UserMapper.class)\u00a0\u65f6\uff0cMapperProxyFactory\u00a0\u4f1a\u5de5\u4f5c\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u6e90\u7801\u6838\u5fc3\nreturn (T) Proxy.newProxyInstance(\n    mapperInterface.getClassLoader(), \n    new Class&#91;]{ mapperInterface }, \/\/ \u53ea\u6709\u63a5\u53e3\uff0c\u6ca1\u6709\u5b9e\u73b0\u7c7b\u5bf9\u8c61\n    mapperProxy \/\/ \u8fd9\u662f InvocationHandler\uff0c\u91cc\u9762\u5305\u542b\u4e86 SQL \u6267\u884c\u903b\u8f91\n);<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"326\" height=\"1024\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736119-\u5177\u4f53\u6e90\u7801-326x1024.png\" alt=\"\" class=\"wp-image-1662\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736119-\u5177\u4f53\u6e90\u7801-326x1024.png 326w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736119-\u5177\u4f53\u6e90\u7801-768x2411.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736119-\u5177\u4f53\u6e90\u7801-489x1536.png 489w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736119-\u5177\u4f53\u6e90\u7801-652x2048.png 652w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736119-\u5177\u4f53\u6e90\u7801.png 789w\" sizes=\"auto, (max-width: 326px) 100vw, 326px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\u62bd\u8c61\u7c7b\u80fd\u7528 JDK \u52a8\u6001\u4ee3\u7406\u5417\uff1f<\/h4>\n\n\n\n<p><strong>\u7b54\u6848\uff1a\u7edd\u5bf9\u4e0d\u80fd\u3002<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u539f\u56e0\u5206\u6790<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"599\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736474-image-1024x599.png\" alt=\"\" class=\"wp-image-1664\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736474-image-1024x599.png 1024w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736474-image-300x176.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736474-image-768x450.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766736474-image.png 1148w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Java \u7ee7\u627f\u673a\u5236\u9650\u5236\uff08\u6838\u5fc3\u539f\u56e0\uff09<\/strong>\uff1a<br>JDK \u751f\u6210\u7684\u52a8\u6001\u4ee3\u7406\u7c7b\uff08\u6bd4\u5982\u00a0$Proxy0\uff09\uff0c\u5728\u5b57\u8282\u7801\u5c42\u9762\u4f1a\u81ea\u52a8\u7ee7\u627f\u00a0java.lang.reflect.Proxy\u00a0\u7c7b\u3002<br><code>public final class $Proxy0 extends Proxy implements Subject { ... }<\/code><br><br>\u7531\u4e8e Java\u00a0<strong>\u4e0d\u652f\u6301\u591a\u7ee7\u627f<\/strong>\uff0c\u4ee3\u7406\u7c7b\u5df2\u7ecf\u7ee7\u627f\u4e86\u00a0Proxy\uff0c\u5c31\u65e0\u6cd5\u518d\u7ee7\u627f\u5176\u4ed6\u7684\u7c7b\uff08\u5305\u62ec\u62bd\u8c61\u7c7b\uff09\u3002<\/li>\n\n\n\n<li>\u6587\u7ae0\u622a\u56fe\u663e\u793a\uff0cJDK \u7684\u00a0Proxy\u00a0\u6e90\u7801\u5728\u751f\u6210\u4ee3\u7406\u7c7b\u4e4b\u524d\uff0c\u4f1a\u663e\u5f0f\u68c0\u67e5\u4f20\u5165\u7684 Class \u662f\u5426\u662f\u4e00\u4e2a\u63a5\u53e3\uff08!interfaceClass.isInterface()\uff09\u3002\u5982\u679c\u662f\u7c7b\uff0c\u76f4\u63a5\u62a5\u9519\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>\u8865\u5145<\/strong>\uff1a\u5982\u679c\u8981\u4ee3\u7406\u62bd\u8c61\u7c7b\u6216\u666e\u901a\u7c7b\uff0c\u9700\u8981\u4f7f\u7528&nbsp;<strong>CGLIB<\/strong>\uff08\u57fa\u4e8e\u5b57\u8282\u7801\u7ee7\u627f\u7684\u65b9\u5f0f\uff09\uff0c\u800c\u4e0d\u662f JDK \u52a8\u6001\u4ee3\u7406<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p> \u7ebf\u7a0b\u6c60\u4e2d\u7684<strong>\u62d2\u7edd\u7b56\u7565<\/strong> \uff0c\u4f5c\u4e3a\u6700\u540e\u4e00\u9053\u9632\u7ebf\uff0c\u5f80\u5f80\u4ee3\u8868\u4e86\u7cfb\u7edf\u5df2\u51fa\u73b0\u77ed\u65f6\u74f6\u9888\u6216\u914d\u7f6e\u4e0d\u5408\u7406\u7b49\u95ee\u9898\u3002<\/p>\n\n\n\n<p>\u4e3a\u6b64\uff0c\u6211\u4eec\u5e0c\u671b\u5728\u62d2\u7edd\u4efb\u52a1\u53d1\u751f\u7684\u7b2c\u4e00\u65f6\u95f4\uff1a\u8bb0\u5f55\u5173\u952e\u6307\u6807\uff0c\u4fbf\u4e8e\u4e8b\u540e\u5206\u6790\u4e0e\u6269\u5bb9\u8c03\u4f18\uff1b\u4e0a\u62a5\u62a5\u8b66\uff0c\u544a\u77e5\u7cfb\u7edf\u7ef4\u62a4\u4eba\u5458\uff1b<\/p>\n\n\n\n<p> \u8fd9\u662f\u4e00\u7bc7\u5173\u4e8e\u5982\u4f55\u4e3a\u4e00\u4e2a Java \u7ebf\u7a0b\u6c60\u6846\u67b6\uff08\u9879\u76ee\u540d\u4e3a <code>onethread<\/code>\uff09\u8bbe\u8ba1<strong>\u62d2\u7edd\u7b56\u7565\u76d1\u63a7\u4e0e\u544a\u8b66<\/strong>\u529f\u80fd\u7684\u6df1\u5ea6\u6280\u672f\u89e3\u6790\u3002<\/p>\n\n\n\n<p>\u6587\u7ae0\u7684\u903b\u8f91\u662f\u4ece\u201c\u75db\u70b9\u201d\u51fa\u53d1\uff0c\u7ecf\u5386\u4e86\u201c\u9759\u6001\u4ee3\u7406\u201d -&gt; \u201c\u52a8\u6001\u4ee3\u7406\u201d -&gt; \u201cLambda\/\u533f\u540d\u5185\u90e8\u7c7b\u5305\u88c5\u201d\u7684\u6280\u672f\u6f14\u8fdb\u8fc7\u7a0b\uff0c\u5e76\u914d\u5957\u4e86\u5f02\u6b65\u544a\u8b66\u673a\u5236\u3002<\/p>\n\n\n\n<p>\u4e0b\u9762\u6211\u5c06\u7ed3\u5408\u4f60\u63d0\u4f9b\u7684\u9879\u76ee\u76ee\u5f55\u7ed3\u6784\uff0c\u8be6\u7ec6\u8bb2\u89e3\u8fd9\u4e00\u6280\u672f\u5b9e\u73b0\u65b9\u6848\u53ca\u5176\u5728\u4ee3\u7801\u4e2d\u7684\u5177\u4f53\u4f4d\u7f6e\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u6838\u5fc3\u75db\u70b9\u4e0e\u76ee\u6807<\/h3>\n\n\n\n<p><strong>\u80cc\u666f<\/strong>\uff1a<br>JDK \u539f\u751f\u7684 <code>ThreadPoolExecutor<\/code> \u4e2d\uff0c<code>reject<\/code> \u65b9\u6cd5\u662f <code>final<\/code> \u7684\uff0c\u4e14\u9ed8\u8ba4\u6743\u9650\u4e0d\u53ef\u89c1\u3002<br><strong>\u95ee\u9898<\/strong>\uff1a<br>\u5f53\u7ebf\u7a0b\u6c60\u89e6\u53d1\u62d2\u7edd\u7b56\u7565\uff08\u4efb\u52a1\u6ee1\u4e86\u4e14\u961f\u5217\u6ee1\u4e86\uff09\u65f6\uff0c\u5f00\u53d1\u4eba\u5458\u65e0\u6cd5\u76f4\u63a5\u4ecb\u5165\u53bb\u7edf\u8ba1\u6b21\u6570\u6216\u53d1\u9001\u62a5\u8b66\u3002<br><strong>\u76ee\u6807<\/strong>\uff1a<br>\u5728\u4e0d\u4fee\u6539 JDK \u6e90\u7801\u7684\u524d\u63d0\u4e0b\uff0c\u80fd\u591f\u6355\u83b7\u201c\u62d2\u7edd\u201d\u8fd9\u4e00\u52a8\u4f5c\uff0c\u5b9e\u73b0\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7edf\u8ba1<\/strong>\uff1a\u8bb0\u5f55\u62d2\u7edd\u4e86\u591a\u5c11\u6b21\u3002<\/li>\n\n\n\n<li><strong>\u544a\u8b66<\/strong>\uff1a\u901a\u77e5\u8fd0\u7ef4\u6216\u5f00\u53d1\u4eba\u5458\u3002<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u6280\u672f\u6f14\u8fdb\uff1a\u4ece\u52a8\u6001\u4ee3\u7406\u5230 Lambda \u5305\u88c5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">2.1 \u52a8\u6001\u4ee3\u7406\u65b9\u6848 (Dynamic Proxy)<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">\u9759\u6001\u4ee3\u7406<\/h5>\n\n\n\n<p>\u7ebf\u7a0b\u6c60\u7684\u62d2\u7edd\u4efb\u52a1\u65b9\u6cd5\u88ab\u8bbe\u7f6e\u4e3a <code>final<\/code> \u4e14\u5177\u6709\u9ed8\u8ba4\u8bbf\u95ee\u6743\u9650\uff0c\u5bfc\u81f4\u6211\u4eec<strong>\u65e0\u6cd5\u7ee7\u627f\u6216\u91cd\u5199\u8be5\u65b9\u6cd5<\/strong> \uff0c\u4f46\u6211\u4eec\u4ecd\u53ef\u4ee5\u901a\u8fc7 <strong>\u4ee3\u7406\u6a21\u5f0f<\/strong> \u5b9e\u73b0\u6269\u5c55\u529f\u80fd\u3002<strong>\u4ee3\u7406\u6a21\u5f0f<\/strong>\u662f\u4e00\u79cd\u5728<strong>\u4e0d\u4fee\u6539\u539f\u59cb\u7c7b\u4ee3\u7801\u7684\u524d\u63d0\u4e0b<\/strong> \uff0c\u901a\u8fc7\u5f15\u5165\u4ee3\u7406\u5bf9\u8c61\u5bf9\u5176\u884c\u4e3a\u8fdb\u884c\u589e\u5f3a\u7684\u8bbe\u8ba1\u624b\u6bb5\uff0c\u975e\u5e38\u9002\u5408\u7528\u4e8e\u529f\u80fd\u589e\u5f3a\u3001\u6743\u9650\u63a7\u5236\u3001\u5ef6\u8fdf\u52a0\u8f7d\u7b49\u573a\u666f\u3002<\/p>\n\n\n\n<p>\u6587\u7ae0\u9996\u5148\u63d0\u51fa\u4f7f\u7528 JDK \u52a8\u6001\u4ee3\u7406\uff08<code>InvocationHandler<\/code>\uff09\u6765\u62e6\u622a\u62d2\u7edd\u7b56\u7565\u7684\u6267\u884c\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"779\" height=\"363\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766741446-image.png\" alt=\"\" class=\"wp-image-1667\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766741446-image.png 779w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766741446-image-300x140.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766741446-image-768x358.png 768w\" sizes=\"auto, (max-width: 779px) 100vw, 779px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u539f\u7406<\/strong>\uff1a\u521b\u5efa\u4e00\u4e2a\u4ee3\u7406\u5bf9\u8c61\u5305\u88f9\u539f\u672c\u7684 <code>RejectedExecutionHandler<\/code>\u3002\u5f53 <code>rejectedExecution<\/code> \u88ab\u8c03\u7528\u65f6\uff0c\u4ee3\u7406\u5bf9\u8c61\u5148\u6267\u884c <code>rejectCount.incrementAndGet()<\/code>\uff0c\u7136\u540e\u518d\u53cd\u5c04\u8c03\u7528\u539f\u59cb\u7684\u903b\u8f91\u3002<\/li>\n\n\n\n<li><strong>\u4ee3\u7801\u4f53\u73b0<\/strong>\uff1a<br>\u5728 <code>OneThreadExecutor<\/code> \u7684\u6784\u9020\u51fd\u6570\u4e2d\uff0c\u5bf9\u4f20\u5165\u7684 <code>handler<\/code> \u8fdb\u884c\u52a8\u6001\u4ee3\u7406\u5305\u88c5\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u6d89\u53ca\u4ee3\u7801\u4f4d\u7f6e<\/strong>\uff1a<br><code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/OneThreadExecutor.java<\/code><\/p>\n\n\n\n<p>\u5728 <code>OneThreadExecutor.java<\/code> \u4e2d\uff0c\u4f1a\u6709\u7c7b\u4f3c\u5982\u4e0b\u7684\u903b\u8f91\uff08\u5bf9\u5e94\u6587\u4e2d\u4ee3\u7801\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u4ee3\u7801\u4f4d\u4e8e OneThreadExecutor.java\n@Override\npublic void setRejectedExecutionHandler(RejectedExecutionHandler handler) {\n    \/\/ \u521b\u5efa\u52a8\u6001\u4ee3\u7406\uff0c\u62e6\u622a rejectedExecution \u65b9\u6cd5\n    RejectedExecutionHandler rejectedProxy = (RejectedExecutionHandler) Proxy\n            .newProxyInstance(\n                    handler.getClass().getClassLoader(),\n                    new Class&#91;]{RejectedExecutionHandler.class},\n                    new RejectedProxyInvocationHandler(handler, rejectCount)\n            );\n    super.setRejectedExecutionHandler(rejectedProxy);\n}<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">\u52a8\u6001\u4ee3\u7406<\/h5>\n\n\n\n<p>\u8fd9\u662f\u4e00\u7bc7\u975e\u5e38\u7cbe\u5f69\u7684\u6280\u672f\u8bbe\u8ba1\u6587\u6863\uff0c\u8bb2\u8ff0\u4e86\u5982\u4f55\u4e3a\u4e00\u4e2a\u6807\u51c6\u7684 Java \u7ebf\u7a0b\u6c60\uff08<code>ThreadPoolExecutor<\/code>\uff09\u6dfb\u52a0<strong>\u201c\u62d2\u7edd\u7b56\u7565\u76d1\u63a7\u4e0e\u544a\u8b66\u201d<\/strong>\u529f\u80fd\u3002<\/p>\n\n\n\n<p>\u4e3a\u4e86\u8ba9\u4f60\u201c\u901a\u900f\u201d\u5730\u7406\u89e3\u8fd9\u6bb5\u5185\u5bb9\uff0c\u6211\u5c06\u5b83\u62c6\u89e3\u4e3a<strong>\u56db\u4e2a\u6838\u5fc3\u5c42\u9762<\/strong>\u6765\u4e3a\u4f60\u5256\u6790\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u75db\u70b9\u4e0e\u76ee\u6807<\/strong>\uff1a\u4e3a\u4ec0\u4e48\u8981\u6298\u817e\u8fd9\u4e2a\uff1f<\/li>\n\n\n\n<li><strong>\u521d\u9636\u65b9\u6848\uff08\u9759\u6001\u4ee3\u7406\uff09<\/strong>\uff1a\u4e5f\u5c31\u662f\u201c\u7b28\u529e\u6cd5\u201d\uff0c\u4ee5\u53ca\u5b83\u7684\u5c40\u9650\u6027\u3002<\/li>\n\n\n\n<li><strong>\u9ad8\u9636\u65b9\u6848\uff08\u52a8\u6001\u4ee3\u7406\uff09<\/strong>\uff1a\u6838\u5fc3\u9ed1\u79d1\u6280\uff0c\u5982\u4f55\u65e0\u4fb5\u5165\u5730\u589e\u5f3a\u529f\u80fd\u3002<\/li>\n\n\n\n<li><strong>\u67b6\u6784\u8bbe\u8ba1\uff08\u5f02\u6b65\u544a\u8b66\uff09<\/strong>\uff1a\u5728\u9ad8\u6027\u80fd\u573a\u666f\u4e0b\uff0c\u5982\u4f55\u4f18\u96c5\u5730\u5904\u7406\u76d1\u63a7\u6570\u636e\u3002<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e8c\u5c42\uff1a\u521d\u9636\u65b9\u6848\u2014\u2014\u9759\u6001\u4ee3\u7406 (Static Proxy)<\/h3>\n\n\n\n<p>\u8fd9\u662f\u6700\u76f4\u89c2\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u601d\u8def\u3002<\/p>\n\n\n\n<p><strong>\u903b\u8f91\uff1a<\/strong><br>\u65e2\u7136\u6211\u4e0d\u80fd\u4fee\u6539 JDK \u6e90\u7801\u91cc\u7684 <code>AbortPolicy<\/code>\uff0c\u90a3\u6211\u5c31\u81ea\u5df1\u5199\u4e00\u4e2a\u7c7b <code>SupportAbortPolicyRejected<\/code>\uff0c\u7ee7\u627f\u5b83\u6216\u8005\u5305\u88c5\u5b83\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u505a\u6cd5<\/strong>\uff1a\n<ol class=\"wp-block-list\">\n<li>\u81ea\u5b9a\u4e49\u4e00\u4e2a\u7ebf\u7a0b\u6c60 <code>SupportThreadPoolExecutor<\/code>\uff0c\u91cc\u9762\u653e\u4e00\u4e2a\u8ba1\u6570\u5668 <code>AtomicInteger<\/code>\u3002<\/li>\n\n\n\n<li>\u81ea\u5b9a\u4e49\u4e00\u4e2a\u63a5\u53e3 <code>SupportRejectedExecutionHandler<\/code>\uff0c\u5b9a\u4e49\u4e00\u4e2a <code>beforeReject<\/code> \u65b9\u6cd5\u7528\u6765\u8ba1\u6570\u3002<\/li>\n\n\n\n<li>\u5199\u6b7b\u4e00\u4e2a\u5177\u4f53\u7684\u7b56\u7565\u7c7b\uff0c\u6bd4\u5982 <code>SupportAbortPolicyRejected<\/code>\uff0c\u5728\u6267\u884c\u539f\u751f\u903b\u8f91\u524d\uff0c\u5148\u8c03\u7528\u8ba1\u6570\u65b9\u6cd5\u3002<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<p>\u4ee3\u7801\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public interface SupportRejectedExecutionHandler extends RejectedExecutionHandler {\n\u200b\n    \/**\n     * \u62d2\u7edd\u7b56\u7565\u524d\u7f6e\u5904\u7406\u903b\u8f91\uff1a\u7edf\u8ba1\u4e0e\u544a\u8b66\u3002\n     *\/\n    default void beforeReject(ThreadPoolExecutor executor) {\n        if (executor instanceof SupportThreadPoolExecutor) {\n            SupportThreadPoolExecutor supportExecutor = (SupportThreadPoolExecutor) executor;\n            \/\/ \u62d2\u7edd\u6b21\u6570\u81ea\u589e\n            supportExecutor.incrementRejectCount();\n            \/\/ \u6267\u884c\u544a\u8b66\u903b\u8f91\uff08\u53ef\u66ff\u6362\u4e3a\u5b9e\u9645\u63a8\u9001\u6e20\u9053\uff09\n            System.out.println(\"\u7ebf\u7a0b\u6c60\u89e6\u53d1\u4e86\u4efb\u52a1\u62d2\u7edd...\");\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u7136\u540e\u4ee5 <code>AbortPolicy<\/code> \u4e3a\u4f8b\uff0c\u5b9e\u73b0\u4e00\u4e2a\u5177\u5907\u6269\u5c55\u80fd\u529b\u7684\u62d2\u7edd\u7b56\u7565\u7c7b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class SupportAbortPolicyRejected extends ThreadPoolExecutor.AbortPolicy\n        implements SupportRejectedExecutionHandler {\n\u200b\n    @Override\n    public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {\n        beforeReject(e); \/\/ \u62d2\u7edd\u524d\u6267\u884c\u6269\u5c55\u903b\u8f91\n        super.rejectedExecution(r, e); \/\/ \u8c03\u7528\u539f\u59cb\u7b56\u7565\u884c\u4e3a\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3\">3. \u529f\u80fd\u9a8c\u8bc1<\/h3>\n\n\n\n<p>\u6211\u4eec\u901a\u8fc7\u4e00\u4e2a\u7b80\u5355\u7684\u6d4b\u8bd5\u7528\u4f8b\uff0c\u9a8c\u8bc1\u4e0a\u8ff0\u6269\u5c55\u62d2\u7edd\u7b56\u7565\u662f\u5426\u80fd\u5b9e\u73b0<strong>\u62d2\u7edd\u7edf\u8ba1+\u544a\u8b66\u8f93\u51fa<\/strong> \u7684\u9884\u671f\u529f\u80fd\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@SneakyThrows\npublic static void main(String&#91;] args) {\n    SupportThreadPoolExecutor executor = new SupportThreadPoolExecutor(\n            1,\n            1,\n            1024,\n            TimeUnit.SECONDS,\n            new LinkedBlockingQueue&lt;>(1),\n            \/\/ \u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u589e\u5f3a\u578b\u62d2\u7edd\u7b56\u7565\n            new SupportAbortPolicyRejected()\n    );\n\u200b\n    \/\/ \u63d0\u4ea4 3 \u4e2a\u4efb\u52a1\uff0c\u8d85\u8fc7\u6700\u5927\u7ebf\u7a0b\u6570\u548c\u961f\u5217\u5bb9\u91cf\uff0c\u89e6\u53d1\u62d2\u7edd\n    for (int i = 0; i &lt; 3; i++) {\n        try {\n            executor.execute(() -> Thread.sleep(Integer.MAX_VALUE));\n        } catch (Exception ex) {\n            \/\/ \u5ffd\u7565\u62d2\u7edd\u5f02\u5e38\uff0c\u4e13\u6ce8\u9a8c\u8bc1\u7edf\u8ba1\u4e0e\u544a\u8b66\u903b\u8f91\n        }\n    }\n\u200b\n    Thread.sleep(50);\n    System.out.println(String.format(\"\u7ebf\u7a0b\u6c60\u62d2\u7edd\u6b21\u6570\u7edf\u8ba1 :: %d\", executor.getRejectCount()));\n}\n\u200b\n\/\/ \u63a7\u5236\u53f0\u8f93\u51fa\u793a\u4f8b\uff1a\n\u7ebf\u7a0b\u6c60\u89e6\u53d1\u4e86\u4efb\u52a1\u62d2\u7edd...\n\u7ebf\u7a0b\u6c60\u62d2\u7edd\u6b21\u6570\u7edf\u8ba1 :: 1<\/code><\/pre>\n\n\n\n<p>\u4ece\u65e5\u5fd7\u53ef\u4ee5\u786e\u8ba4\uff0c<strong>\u6211\u4eec\u7684\u6269\u5c55\u903b\u8f91\u5df2\u6210\u529f\u751f\u6548<\/strong> \uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u62d2\u7edd\u7b56\u7565\u89e6\u53d1\u65f6\uff0c\u6267\u884c\u4e86 <code>beforeReject()<\/code> \u4e2d\u7684\u7edf\u8ba1\u4e0e\u65e5\u5fd7\u8f93\u51fa\u3002<\/li>\n\n\n\n<li>\u7ebf\u7a0b\u6c60\u51c6\u786e\u8bb0\u5f55\u4e86\u88ab\u62d2\u7edd\u4efb\u52a1\u7684\u6b21\u6570\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4\">4. \u6a21\u5f0f\u5c0f\u7ed3<\/h3>\n\n\n\n<p>\u4e0a\u8ff0\u6269\u5c55\u65b9\u6848\u91c7\u7528\u7684\u662f\u4e00\u79cd\u7ecf\u5178\u7684\u8bbe\u8ba1\u6a21\u5f0f\uff1a<strong>\u9759\u6001\u4ee3\u7406<\/strong> \u3002\u5efa\u8bae\u5927\u5bb6\u5728\u7ee7\u7eed\u9605\u8bfb\u4e4b\u524d\uff0c\u5148\u5728\u672c\u5730\u8fd0\u884c\u4e00\u904d\u793a\u4f8b\u4ee3\u7801\uff0c\u901a\u8fc7\u5b9e\u8df5\u52a0\u6df1\u7406\u89e3\u3002<\/p>\n\n\n\n<p>\u5b8c\u6210\u8fd0\u884c\u540e\uff0c\u6211\u4eec\u603b\u7ed3\u51fa\u4e00\u5f20\u56fe\uff0c\u5e2e\u52a9\u5927\u5bb6\u66f4\u76f4\u89c2\u5730\u7406\u89e3<strong>\u9759\u6001\u4ee3\u7406\u7684\u5de5\u4f5c\u673a\u5236<\/strong> \uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"529\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766755070-image-1024x529.png\" alt=\"\" class=\"wp-image-1682\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766755070-image-1024x529.png 1024w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766755070-image-300x155.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766755070-image-768x397.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2025\/12\/1766755070-image.png 1146w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>\u4e3a\u4ec0\u4e48\u8bf4\u5b83\u4e0d\u591f\u4f18\u96c5\uff08\u5c40\u9650\u6027\uff09\uff1f<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7c7b\u7206\u70b8\uff08Class Explosion\uff09<\/strong>\uff1aJDK \u6709 4 \u79cd\u9ed8\u8ba4\u62d2\u7edd\u7b56\u7565\uff08Abort, Discard, DiscardOldest, CallerRuns\uff09\u3002\u5982\u679c\u4f60\u60f3\u76d1\u63a7\u6240\u6709\u7c7b\u578b\uff0c\u4f60\u5c31\u5f97\u5199 4 \u4e2a\u5bf9\u5e94\u7684\u5305\u88c5\u7c7b\u3002\u5982\u679c\u7528\u6237\u81ea\u5b9a\u4e49\u4e86\u7b56\u7565\uff0c\u4f60\u8fd8\u5f97\u518d\u5199\u4e00\u4e2a\u3002<\/li>\n\n\n\n<li><strong>\u4fb5\u5165\u6027\u5f3a<\/strong>\uff1a\u7528\u6237\u5fc5\u987b\u663e\u5f0f\u5730 <code>new SupportAbortPolicyRejected()<\/code>\uff0c\u4ee3\u7801\u6539\u52a8\u5927\uff0c\u4e14\u5bb9\u6613\u5fd8\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e09\u5c42\uff1a\u9ad8\u9636\u65b9\u6848\u2014\u2014\u52a8\u6001\u4ee3\u7406 (Dynamic Proxy)<\/h3>\n\n\n\n<p>\u8fd9\u662f\u672c\u6587\u7684\u6838\u5fc3\u7cbe\u534e\u3002\u4f5c\u8005\u5229\u7528\u4e86 JDK \u7684\u52a8\u6001\u4ee3\u7406\uff08<code>java.lang.reflect.Proxy<\/code>\uff09\u6765\u89e3\u51b3\u201c\u7c7b\u7206\u70b8\u201d\u548c\u201c\u4fb5\u5165\u6027\u201d\u95ee\u9898\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. \u4ec0\u4e48\u662f\u52a8\u6001\u4ee3\u7406\uff1f<\/h4>\n\n\n\n<p>\u7b80\u5355\u8bf4\uff0c\u5c31\u662f\u53ef\u4ee5\u5728<strong>\u8fd0\u884c\u65f6<\/strong>\u52a8\u6001\u751f\u6210\u4e00\u4e2a\u201c\u5047\u201d\u5bf9\u8c61\uff08\u4ee3\u7406\u5bf9\u8c61\uff09\u3002\u5f53\u6709\u4eba\u8c03\u7528\u8fd9\u4e2a\u5047\u5bf9\u8c61\u7684\u65b9\u6cd5\u65f6\uff0c\u4f1a\u5148\u7ecf\u8fc7\u4f60\u7684\u62e6\u622a\u903b\u8f91\uff08<code>InvocationHandler<\/code>\uff09\uff0c\u7136\u540e\u518d\u7531\u4f60\u51b3\u5b9a\u662f\u5426\u8c03\u7528\u201c\u771f\u201d\u5bf9\u8c61\u7684\u65b9\u6cd5\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. \u4ee3\u7801\u6df1\u5ea6\u89e3\u6790<\/h4>\n\n\n\n<p>\u4f5c\u8005\u521b\u5efa\u4e86 <code>RejectedProxyInvocationHandler<\/code>\uff0c\u5b9e\u73b0\u4e86 <code>InvocationHandler<\/code> \u63a5\u53e3\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u62e6\u622a\u903b\u8f91 (<code>invoke<\/code> \u65b9\u6cd5)<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li><strong>\u5224\u5b9a<\/strong>\uff1a\u901a\u8fc7 <code>method.getName()<\/code> \u5224\u65ad\u5f53\u524d\u8c03\u7528\u7684\u65b9\u6cd5\u662f\u4e0d\u662f <code>rejectedExecution<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u589e\u5f3a<\/strong>\uff1a\u5982\u679c\u662f\uff0c\u7acb\u9a6c\u6267\u884c <code>rejectCount.incrementAndGet()<\/code>\uff08\u8ba1\u6570\u5668+1\uff09\u3002<\/li>\n\n\n\n<li><strong>\u56de\u6eaf<\/strong>\uff1a\u6700\u540e\u901a\u8fc7 <code>method.invoke(target, args)<\/code> \u8c03\u7528\u539f\u59cb\u5bf9\u8c61\u7684\u903b\u8f91\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>@AllArgsConstructor\npublic class RejectedProxyInvocationHandler implements InvocationHandler {\n\u200b\n    private final Object target;\n    private final AtomicLong rejectCount;\n\u200b\n    private static final String REJECT_METHOD = \"rejectedExecution\";\n\u200b\n    @Override\n    public Object invoke(Object proxy, Method method, Object&#91;] args) throws Throwable {\n        if (REJECT_METHOD.equals(method.getName()) &amp;&amp;\n                args != null &amp;&amp;\n                args.length == 2 &amp;&amp;\n                args&#91;0] instanceof Runnable &amp;&amp;\n                args&#91;1] instanceof ThreadPoolExecutor) {\n            rejectCount.incrementAndGet();\n        }\n\u200b\n        if (\"toString\".equals(method.getName()) &amp;&amp; method.getParameterCount() == 0) {\n            return target.getClass().getSimpleName();\n        }\n\u200b\n        try {\n            return method.invoke(target, args);\n        } catch (InvocationTargetException ex) {\n            throw ex.getCause();\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p><strong>\u5999\u5904\u5728\u4e8e\uff1a<\/strong><\/p>\n\n\n\n<p><code>target<\/code>\uff1a\u88ab\u4ee3\u7406\u7684\u5bf9\u8c61\uff0c\u901a\u5e38\u662f\u67d0\u4e2a\u5177\u4f53\u7684 <code>RejectedExecutionHandler<\/code> \u5b9e\u4f8b\u3002<\/p>\n\n\n\n<p><code>rejectCount<\/code>\uff1a\u7ebf\u7a0b\u5b89\u5168\u7684\u62d2\u7edd\u6b21\u6570\u7edf\u8ba1\u5668\uff0c\u4ee3\u7406\u4e2d\u6bcf\u6b21\u62d2\u7edd\u90fd\u4f1a\u81ea\u589e\u3002<\/p>\n\n\n\n<p><code>REJECT_METHOD<\/code>\uff1a\u5e38\u91cf\uff0c\u7528\u4e8e\u5feb\u901f\u5224\u65ad\u662f\u5426\u662f <code>rejectedExecution<\/code> \u65b9\u6cd5\u3002<\/p>\n\n\n\n<p>\u6838\u5fc3\u65b9\u6cd5 <code>invoke<\/code>\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1.\u5224\u65ad\u662f\u5426\u662f\u62d2\u7edd\u65b9\u6cd5\uff1a\n<ol class=\"wp-block-list\">\n<li>1.\u5224\u65ad\u5f53\u524d\u8c03\u7528\u7684\u65b9\u6cd5\u662f\u5426\u4e3a <code>rejectedExecution<\/code>\uff1b<\/li>\n\n\n\n<li>2.\u6821\u9a8c\u53c2\u6570\u5408\u6cd5\u6027\uff1a\u4e24\u4e2a\u53c2\u6570\u5206\u522b\u662f <code>Runnable<\/code> \u548c <code>ThreadPoolExecutor<\/code>\uff1b<\/li>\n\n\n\n<li>3.\u5982\u679c\u6ee1\u8db3\u6761\u4ef6\uff0c\u8868\u793a\u7ebf\u7a0b\u6c60\u62d2\u7edd\u4e86\u4e00\u4e2a\u4efb\u52a1\uff0c\u8c03\u7528 <code>rejectCount.incrementAndGet()<\/code> \u5b9e\u73b0\u62d2\u7edd\u6b21\u6570\u7d2f\u52a0\u3002<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>2.\u7279\u6b8a\u5904\u7406 <code>toString<\/code> \u65b9\u6cd5\uff1a\n<ol class=\"wp-block-list\">\n<li>1.\u4e3a\u4e86\u907f\u514d\u52a8\u6001\u4ee3\u7406\u5bf9\u8c61\u6253\u5370\u51fa\u6765\u662f\u4e00\u5806\u4ee3\u7406\u7c7b\u540d\uff0c\u5355\u72ec\u5904\u7406\u4e86 <code>toString()<\/code> \u65b9\u6cd5\uff1b<\/li>\n\n\n\n<li>2.\u8fd4\u56de\u7684\u662f\u88ab\u4ee3\u7406\u5bf9\u8c61\u7684\u7c7b\u540d\uff0c\u4fbf\u4e8e\u65e5\u5fd7\u6216\u8c03\u8bd5\u65f6\u8bc6\u522b\u539f\u59cb\u62d2\u7edd\u7b56\u7565\u7c7b\u578b\u3002<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>3.\u53cd\u5c04\u8c03\u7528\u539f\u59cb\u903b\u8f91\uff1a\n<ol class=\"wp-block-list\">\n<li>1.\u6700\u7ec8\u901a\u8fc7\u53cd\u5c04\u8c03\u7528\u539f\u59cb <code>RejectedExecutionHandler<\/code> \u7684\u65b9\u6cd5\uff0c\u786e\u4fdd\u539f\u6709\u903b\u8f91\u4e0d\u88ab\u7834\u574f\uff1b<\/li>\n\n\n\n<li>2.\u5982\u679c\u76ee\u6807\u65b9\u6cd5\u629b\u51fa\u5f02\u5e38\uff0c\u5219\u629b\u51fa\u5176\u539f\u59cb\u5f02\u5e38\uff08<code>getCause()<\/code>\uff09\uff0c\u4fdd\u6301\u884c\u4e3a\u4e00\u81f4\u3002<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<p><br>\u65e0\u8bba\u539f\u672c\u662f <code>AbortPolicy<\/code> \u8fd8\u662f <code>DiscardPolicy<\/code>\uff0c\u6216\u8005\u662f\u7528\u6237\u81ea\u5b9a\u4e49\u7684 <code>MyPolicy<\/code>\uff0c<strong>\u53ea\u8981\u5b83\u4eec\u5b9e\u73b0\u4e86 <code>RejectedExecutionHandler<\/code> \u63a5\u53e3\uff0c\u8fd9\u4e2a\u52a8\u6001\u4ee3\u7406\u5c31\u80fd\u901a\u7528\u5730\u5957\u5728\u5b83\u4eec\u5934\u4e0a<\/strong>\u3002\u4e00\u4efd\u4ee3\u7801\uff0c\u589e\u5f3a\u6240\u6709\u7b56\u7565\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. \u6781\u5ea6\u8212\u9002\u7684\u900f\u660e\u96c6\u6210 (<code>OneThreadExecutor<\/code>)<\/h4>\n\n\n\n<p>\u4f5c\u8005\u81ea\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7ebf\u7a0b\u6c60 <code>OneThreadExecutor<\/code>\u3002\u8bf7\u6ce8\u610f\u770b\u5b83\u7684\u6784\u9020\u51fd\u6570\u548c <code>setRejectedExecutionHandler<\/code> \u65b9\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Slf4j\npublic class OneThreadExecutor extends ThreadPoolExecutor {\n\u200b\n    \/\/ ......\n\u200b\n    \/**\n     * \u7ebf\u7a0b\u6c60\u62d2\u7edd\u7b56\u7565\u6267\u884c\u6b21\u6570\n     *\/\n    @Getter\n    private final AtomicLong rejectCount = new AtomicLong();\n\u200b\n    \/\/ ......\n\u200b\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\u200b\n        \/\/ \u901a\u8fc7\u52a8\u6001\u4ee3\u7406\u8bbe\u7f6e\u62d2\u7edd\u7b56\u7565\u6267\u884c\u6b21\u6570\n        setRejectedExecutionHandler(handler);\n\u200b\n        \/\/ ......\n    }\n\u200b\n    @Override\n    public void setRejectedExecutionHandler(RejectedExecutionHandler handler) {\n        RejectedExecutionHandler rejectedProxy = (RejectedExecutionHandler) Proxy\n                .newProxyInstance(\n                        handler.getClass().getClassLoader(),\n                        new Class&#91;]{RejectedExecutionHandler.class},\n                        new RejectedProxyInvocationHandler(handler, rejectCount)\n                );\n        super.setRejectedExecutionHandler(rejectedProxy);\n    }\n}<\/code><\/pre>\n\n\n\n<p><strong>\u8fd9\u610f\u5473\u7740\u4ec0\u4e48\uff1f<\/strong><br>\u7528\u6237\u5728\u4f7f\u7528\u8fd9\u4e2a\u7ebf\u7a0b\u6c60\u65f6\uff0c\u5b8c\u5168\u4e0d\u9700\u8981\u611f\u77e5\u201c\u4ee3\u7406\u201d\u7684\u5b58\u5728\u3002<br>\u7528\u6237\u4ee3\u7801\uff1a<code>new OneThreadExecutor(..., new AbortPolicy())<\/code><br>\u5b9e\u9645\u6548\u679c\uff1a\u7ebf\u7a0b\u6c60\u5185\u90e8\u8fd0\u884c\u7684\u662f<strong>\u201c\u5e26\u8ba1\u6570\u529f\u80fd\u7684 AbortPolicy\u201d<\/strong>\u3002<\/p>\n\n\n\n<p>\u8fd9\u7b26\u5408\u8bbe\u8ba1\u6a21\u5f0f\u4e2d\u7684<strong>\u5f00\u95ed\u539f\u5219<\/strong>\uff1a\u5bf9\u6269\u5c55\u5f00\u653e\uff08\u901a\u8fc7\u4ee3\u7406\u589e\u5f3a\uff09\uff0c\u5bf9\u4fee\u6539\u5173\u95ed\uff08\u7528\u6237\u65e0\u9700\u4fee\u6539\u539f\u6709\u7b56\u7565\u4ee3\u7801\uff09\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u56db\u5c42\uff1a\u67b6\u6784\u8bbe\u8ba1\u2014\u2014\u5f02\u6b65\u544a\u8b66 (Async Alerting)<\/h3>\n\n\n\n<p>\u5373\u4fbf\u6211\u4eec\u7edf\u8ba1\u5230\u4e86\u62d2\u7edd\u6b21\u6570\uff0c\u600e\u4e48\u544a\u8b66\u4e5f\u662f\u4e2a\u5b66\u95ee\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u65b9\u6848\u5bf9\u6bd4<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u65b9\u6848 A\uff08\u5373\u65f6\u544a\u8b66 - \u274c\uff09<\/strong>\uff1a\u5728 <code>InvocationHandler<\/code> \u62e6\u622a\u5230\u62d2\u7edd\u65f6\uff0c\u76f4\u63a5\u53d1 HTTP \u8bf7\u6c42\u544a\u8b66\u3002\n<ul class=\"wp-block-list\">\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u7ebf\u7a0b\u6c60\u6ee1\u672c\u8eab\u5c31\u662f\u7cfb\u7edf\u9ad8\u8d1f\u8f7d\u65f6\u523b\uff0c\u4f60\u8fd8\u5728\u6838\u5fc3\u8def\u5f84\u4e0a\u53d1 HTTP \u8bf7\u6c42\uff08\u7f51\u7edc I\/O\uff09\uff0c\u4f1a\u8fdb\u4e00\u6b65\u963b\u585e\u4e1a\u52a1\u7ebf\u7a0b\uff0c\u751a\u81f3\u5bfc\u81f4\u96ea\u5d29\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u65b9\u6848 B\uff08\u5b9a\u65f6\u626b\u63cf - \u2705\uff09<\/strong>\uff1a\u5373\u4f5c\u8005\u91c7\u7528\u7684 <code>ThreadPoolAlarmChecker<\/code>\u3002<strong>\u8fc7\u5b9a\u65f6\u4efb\u52a1\u5b9a\u671f\u626b\u63cf\u62d2\u7edd\u6b21\u6570<\/strong> \uff1a\u5982\u679c\u67d0\u4e2a\u7ebf\u7a0b\u6c60\u7684\u62d2\u7edd\u6b21\u6570\u4e0e\u4e0a\u4e00\u6b21\u8bb0\u5f55\u4e0d\u4e00\u81f4\uff0c\u5373\u89c6\u4e3a\u51fa\u73b0\u4e86\u65b0\u7684\u62d2\u7edd\u884c\u4e3a\uff0c\u518d\u89e6\u53d1\u544a\u8b66\u903b\u8f91\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u6838\u5fc3\u903b\u8f91\u89e3\u6790<\/h4>\n\n\n\n<p>\u4f5c\u8005\u5f15\u5165\u4e86\u4e00\u4e2a\u72ec\u7acb\u7684\u5b9a\u65f6\u4efb\u52a1\uff08<code>ScheduledExecutorService<\/code>\uff09\uff0c\u4e0e\u4e1a\u52a1\u7ebf\u7a0b\u5b8c\u5168\u89e3\u8026\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5feb\u7167\u5bf9\u6bd4\uff08Edge Triggering\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u7ef4\u62a4\u4e00\u4e2a Map <code>lastRejectCountMap<\/code>\uff0c\u8bb0\u5f55\u4e0a\u4e00\u6b21\u68c0\u67e5\u65f6\u7684\u62d2\u7edd\u603b\u6570\u3002<\/li>\n\n\n\n<li>\u6bcf\u9694\u4e00\u6bb5\u65f6\u95f4\uff08\u6bd4\u5982 1 \u5206\u949f\uff09\uff0c\u8bfb\u53d6\u5f53\u524d\u7ebf\u7a0b\u6c60\u7684 <code>currentRejectCount<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u5224\u65ad<\/strong>\uff1a<code>if (current > last)<\/code>\uff0c\u8bf4\u660e\u8fd9\u6bb5\u65f6\u95f4\u5185\u53d1\u751f\u4e86\u65b0\u7684\u62d2\u7edd\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u4f18\u52bf<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li><strong>\u6027\u80fd\u4fdd\u62a4<\/strong>\uff1a\u544a\u8b66\u903b\u8f91\u4e0d\u5360\u7528\u4e1a\u52a1\u7ebf\u7a0b\u6c60\u7684\u8d44\u6e90\u3002<\/li>\n\n\n\n<li><strong>\u9632\u6296\u52a8<\/strong>\uff1a\u907f\u514d\u4e86\u77ac\u95f4\u62d2\u7edd 1000 \u6b21\u4efb\u52a1\u5bfc\u81f4\u53d1\u51fa 1000 \u6761\u544a\u8b66\u8f70\u70b8\u624b\u673a\u3002\u5b9a\u65f6\u626b\u63cf\u5929\u7136\u8d77\u5230\u4e86\u805a\u5408\u4f5c\u7528\uff08\u6bd4\u5982\u201c\u8fc7\u53bb 1 \u5206\u949f\u5185\u65b0\u589e\u4e86 50 \u6b21\u62d2\u7edd\u201d\uff09\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u6574\u4e2a\u94fe\u8def\u662f\u5982\u4f55\u8dd1\u901a\u7684\uff1f<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5c01\u88c5<\/strong>\uff1a\u5f00\u53d1\u8005\u521b\u5efa <code>OneThreadExecutor<\/code>\uff0c\u5e95\u5c42\u81ea\u52a8\u901a\u8fc7<strong>\u52a8\u6001\u4ee3\u7406<\/strong>\u5305\u88c5\u4e86\u62d2\u7edd\u7b56\u7565\u3002<\/li>\n\n\n\n<li><strong>\u89e6\u53d1<\/strong>\uff1a\u4e1a\u52a1\u9ad8\u5e76\u53d1\uff0c\u7ebf\u7a0b\u6c60\u6ee1\u4e86 -> \u8c03\u7528\u4ee3\u7406\u5bf9\u8c61\u7684 <code>rejectedExecution<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u8ba1\u6570<\/strong>\uff1a\u4ee3\u7406\u5bf9\u8c61\u62e6\u622a\u8c03\u7528 -> \u539f\u5b50\u8ba1\u6570\u5668 <code>AtomicLong<\/code> \u81ea\u589e -> \u6267\u884c\u539f\u751f\u62d2\u7edd\u903b\u8f91\uff08\u629b\u5f02\u5e38\uff09\u3002<\/li>\n\n\n\n<li><strong>\u76d1\u63a7<\/strong>\uff1a\u540e\u53f0\u6709\u4e00\u4e2a\u72ec\u7acb\u7684<strong>\u5de1\u68c0\u7ebf\u7a0b<\/strong>\uff08Checker\uff09\u3002<\/li>\n\n\n\n<li><strong>\u544a\u8b66<\/strong>\uff1a\u5de1\u68c0\u7ebf\u7a0b\u53d1\u73b0 <code>\u5f53\u524d\u8ba1\u6570 > \u4e0a\u6b21\u8ba1\u6570<\/code> -> \u89e6\u53d1\u544a\u8b66\u901a\u77e5\u3002<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2.2 \u6700\u7ec8\u65b9\u6848\uff1aLambda \/ \u533f\u540d\u5185\u90e8\u7c7b\u5305\u88c5 (Lightweight Static Proxy)<\/h4>\n\n\n\n<p>\u6587\u7ae0\u6700\u540e\u63d0\u5230\uff0c\u867d\u7136\u52a8\u6001\u4ee3\u7406\u5f88\u5f3a\uff0c\u4f46\u5bf9\u4e8e\u7531\u4e8e\u53ea\u9700\u8981\u589e\u5f3a\u4e00\u4e2a\u63a5\u53e3\u65b9\u6cd5\uff0c\u4f7f\u7528\u52a8\u6001\u4ee3\u7406\u7565\u663e\u201c\u91cd\u201d\u4e14\u589e\u52a0\u4e86\u53cd\u5c04\u5f00\u9500\u3002\u56e0\u6b64\uff0c\u6700\u7ec8 <code>onethread<\/code> \u9009\u62e9\u4e86\u66f4\u7b80\u6d01\u7684<strong>\u533f\u540d\u5185\u90e8\u7c7b\uff08\u6216 Lambda\uff09\u5305\u88c5<\/strong>\u3002<\/p>\n\n\n\n<p>\u8fd9\u672c\u8d28\u4e0a\u662f\u4e00\u79cd\u8f7b\u91cf\u7ea7\u7684\u9759\u6001\u4ee3\u7406\u3002<\/p>\n\n\n\n<p><strong>\u4ee3\u7801\u4f4d\u7f6e<\/strong>\uff1a<br><code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/OneThreadExecutor.java<\/code><\/p>\n\n\n\n<p><strong>\u6838\u5fc3\u903b\u8f91\u89e3\u6790<\/strong>\uff1a<br>\u8be5\u7c7b\u91cd\u5199\u4e86 JDK \u7684 <code>setRejectedExecutionHandler<\/code> \u65b9\u6cd5\u3002\u65e0\u8bba\u7528\u6237\u8bbe\u7f6e\u4ec0\u4e48\u62d2\u7edd\u7b56\u7565\uff08\u5982 <code>AbortPolicy<\/code> \u6216 <code>CallerRunsPolicy<\/code>\uff09\uff0c\u90fd\u4f1a\u88ab\u5305\u88f9\u4e00\u5c42\u7edf\u8ba1\u903b\u8f91\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u4ee3\u7801\u4f4d\u4e8e OneThreadExecutor.java \u7684\u91cd\u5199\u65b9\u6cd5\u4e2d\n@Override\npublic void setRejectedExecutionHandler(RejectedExecutionHandler handler) {\n    \/\/ 1. \u521b\u5efa\u4e00\u4e2a\u5305\u88c5\u5668\uff08\u533f\u540d\u5185\u90e8\u7c7b\uff09\n    RejectedExecutionHandler handlerWrapper = new RejectedExecutionHandler() {\n        @Override\n        public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {\n            \/\/ 2. \u589e\u5f3a\u903b\u8f91\uff1a\u8bb0\u5f55\u62d2\u7edd\u6b21\u6570\n            rejectCount.incrementAndGet();\n            \/\/ 3. \u6267\u884c\u539f\u59cb\u903b\u8f91\n            handler.rejectedExecution(r, executor);\n        }\n\n        @Override\n        public String toString() {\n            \/\/ 4. \u91cd\u5199 toString\uff0c\u9632\u6b62\u65e5\u5fd7\u6253\u5370\u51fa\u539f\u672c\u7684\u533f\u540d\u7c7b\u540d\uff0c\u4fdd\u6301\u539f\u7b56\u7565\u7684\u53ef\u8bfb\u6027\n            return handler.getClass().getSimpleName();\n        }\n    };\n\n    \/\/ 5. \u5c06\u5305\u88c5\u540e\u7684 handler \u8bbe\u7f6e\u7ed9\u7236\u7c7b ThreadPoolExecutor\n    super.setRejectedExecutionHandler(handlerWrapper);\n}<\/code><\/pre>\n\n\n\n<p>\u8fd9\u7bc7\u6587\u7ae0\u662f\u5bf9\u4e0a\u4e00\u7bc7\u201c\u52a8\u6001\u4ee3\u7406\u201d\u65b9\u6848\u7684\u53cd\u601d\u4e0e\u4f18\u5316\u3002\u4f5c\u8005\u5c55\u793a\u4e86\u4e00\u4e2a\u4f18\u79c0\u67b6\u6784\u5e08\u7684\u601d\u7ef4\u8def\u5f84\uff1a<strong>\u4ece\u201c\u80fd\u7528\u201d\u5230\u201c\u70ab\u6280\u201d\uff0c\u6700\u540e\u56de\u5f52\u201c\u5b9e\u7528\u201d\u4e0e\u201c\u7b80\u6d01\u201d<\/strong>\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e00\u5c42\uff1a\u601d\u7ef4\u8f6c\u53d8\u2014\u2014\u4ece\u201c\u5927\u70ae\u6253\u868a\u5b50\u201d\u5230\u201c\u8fd4\u749e\u5f52\u771f\u201d<\/h3>\n\n\n\n<p>\u5728\u4e0a\u4e00\u8282\u4e2d\uff0c\u4f5c\u8005\u4f7f\u7528\u4e86 JDK \u7684\u52a8\u6001\u4ee3\u7406\uff08<code>Proxy.newProxyInstance<\/code>\uff09\u6765\u5b9e\u73b0\u529f\u80fd\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u975e\u5e38\u7075\u6d3b\uff0c\u4e0d\u7528\u7ba1\u5177\u4f53\u63a5\u53e3\u662f\u4ec0\u4e48\uff0c\u5168\u9760\u53cd\u5c04\u4e00\u628a\u68ad\u3002<\/li>\n\n\n\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a<strong>\u91cd<\/strong>\u3002\n<ul class=\"wp-block-list\">\n<li><strong>\u6027\u80fd<\/strong>\uff1a\u53cd\u5c04\u8c03\u7528\u6bd4\u76f4\u63a5\u8c03\u7528\u6162\uff08\u867d\u7136\u5728\u62d2\u7edd\u7b56\u7565\u8fd9\u79cd\u4f4e\u9891\u573a\u666f\u4e0b\u53ef\u5ffd\u7565\uff09\u3002<\/li>\n\n\n\n<li><strong>\u590d\u6742\u5ea6<\/strong>\uff1a\u4ee3\u7801\u91cc\u6d89\u53ca <code>InvocationHandler<\/code>\u3001<code>\u53cd\u5c04<\/code>\u3001<code>\u7c7b\u52a0\u8f7d\u5668<\/code>\uff0c\u5bf9\u4e8e\u540e\u6765\u7ef4\u62a4\u7684\u4eba\u6765\u8bf4\uff0c\u9605\u8bfb\u6210\u672c\u9ad8\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>\u53cd\u601d<\/strong>\uff1a<br>\u6211\u4eec\u771f\u7684\u9700\u8981\u53cd\u5c04\u5417\uff1f<br>\u4ed4\u7ec6\u770b <code>RejectedExecutionHandler<\/code> \u63a5\u53e3\uff0c\u5b83<strong>\u53ea\u6709\u4e00\u4e2a\u65b9\u6cd5<\/strong> <code>rejectedExecution<\/code>\u3002<br>\u8fd9\u5c31\u597d\u6bd4\u4f60\u53ea\u60f3\u7ed9\u4e00\u4e2a\u82f9\u679c\u524a\u76ae\uff08\u589e\u5f3a\u529f\u80fd\uff09\uff0c\u52a8\u6001\u4ee3\u7406\u662f\u9020\u4e86\u4e00\u53f0\u5168\u81ea\u52a8\u524a\u76ae\u673a\uff08\u53cd\u5c04\uff09\uff0c\u800c\u73b0\u5728\u7684\u65b9\u6848\u662f\u76f4\u63a5\u62ff\u628a\u524a\u76ae\u5200\uff08Lambda\/\u533f\u540d\u5185\u90e8\u7c7b\uff09\u624b\u52a8\u524a\u4e00\u4e0b\u3002<strong>\u663e\u7136\uff0c\u540e\u8005\u66f4\u76f4\u63a5\u3001\u66f4\u9ad8\u6548\u3002<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e8c\u5c42\uff1a\u4ee3\u7801\u6f14\u8fdb\u2014\u2014\u4ece Lambda \u5230\u533f\u540d\u5185\u90e8\u7c7b<\/h3>\n\n\n\n<p>\u4f5c\u8005\u7684\u5b9e\u73b0\u8fc7\u7a0b\u7ecf\u5386\u4e86\u4e00\u4e2a\u5fae\u5c0f\u7684\u201c\u5751\u201d\uff0c\u975e\u5e38\u6709\u5b9e\u6218\u53c2\u8003\u4ef7\u503c\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. \u7b2c\u4e00\u7248\uff1a\u7eaf Lambda \u5199\u6cd5\uff08\u5e05\uff0c\u4f46\u6709\u7455\u75b5\uff09<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>super.setRejectedExecutionHandler((r, executor) -&gt; {\n    rejectCount.incrementAndGet(); \/\/ 1. \u589e\u5f3a\u903b\u8f91\uff1a\u8bb0\u6570\n    handler.rejectedExecution(r, executor); \/\/ 2. \u539f\u751f\u903b\u8f91\uff1a\u8c03\u7528\u539f\u6765\u7684\u7b56\u7565\n});<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u539f\u7406<\/strong>\uff1a\u5229\u7528 Java 8 \u7684\u7279\u6027\uff0c\u56e0\u4e3a <code>RejectedExecutionHandler<\/code> \u662f\u51fd\u6570\u5f0f\u63a5\u53e3\uff08\u53ea\u6709\u4e00\u4e2a\u62bd\u8c61\u65b9\u6cd5\uff09\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u7528 Lambda \u8868\u8fbe\u5f0f\u7b80\u5199\u3002<\/li>\n\n\n\n<li><strong>\u7455\u75b5<\/strong>\uff1a<strong>\u201c\u8eab\u4efd\u4e22\u5931\u201d<\/strong>\u3002\n<ul class=\"wp-block-list\">\n<li>\u5f53\u4f60\u6253\u5370\u7ebf\u7a0b\u6c60\u914d\u7f6e\u6216\u8005\u544a\u8b66\u65e5\u5fd7\u65f6\uff0c\u4f60\u901a\u5e38\u4f1a\u8c03\u7528 <code>handler.toString()<\/code> \u6765\u770b\u770b\u5f53\u524d\u7528\u7684\u662f\u4ec0\u4e48\u7b56\u7565\uff08\u662f <code>AbortPolicy<\/code> \u8fd8\u662f <code>DiscardPolicy<\/code>\uff1f\uff09\u3002<\/li>\n\n\n\n<li>Lambda \u8868\u8fbe\u5f0f\u7f16\u8bd1\u540e\u7684 <code>toString()<\/code> \u662f\u4e00\u4e32\u4e71\u7801\uff08\u5982 <code>OneThreadExecutor$$Lambda$758...<\/code>\uff09\u3002\u8fd0\u7ef4\u4eba\u5458\u770b\u5230\u65e5\u5fd7\u4f1a\u4e00\u8138\u61f5\u903c\uff1a\u8fd9\u5230\u5e95\u662f\u4e2a\u5565\u7b56\u7565\uff1f<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2. \u7b2c\u4e8c\u7248\uff1a\u533f\u540d\u5185\u90e8\u7c7b\uff08\u6700\u7ec8\u65b9\u6848\uff09<\/h4>\n\n\n\n<p>\u4e3a\u4e86\u89e3\u51b3 <code>toString<\/code> \u7684\u95ee\u9898\uff0c\u4f5c\u8005\u9000\u4e86\u4e00\u6b65\uff0c\u4f7f\u7528\u4e86<strong>\u533f\u540d\u5185\u90e8\u7c7b<\/strong>\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RejectedExecutionHandler handlerWrapper = new RejectedExecutionHandler() {\n    @Override\n    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {\n        rejectCount.incrementAndGet(); \/\/ \u589e\u5f3a\n        handler.rejectedExecution(r, executor); \/\/ \u56de\u8c03\n    }\n\n    \/\/ \u5173\u952e\u70b9\uff1a\u91cd\u5199 toString\n    @Override\n    public String toString() {\n        \/\/ \u5077\u5929\u6362\u65e5\uff1a\u867d\u7136\u6211\u662f\u4e2a\u5305\u88c5\u7c7b\uff0c\u4f46\u6211\u5bf9\u5916\u5ba3\u79f0\u6211\u662f\u539f\u672c\u90a3\u4e2a handler \u7684\u540d\u5b57\n        return handler.getClass().getSimpleName();\n    }\n};<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5999\u5904<\/strong>\uff1a\u5b83\u65e2\u4fdd\u7559\u4e86 Lambda \u7684\u8f7b\u91cf\u7ea7\uff08\u4e0d\u9700\u8981\u989d\u5916\u5b9a\u4e49\u4e00\u4e2a <code>class MyProxy<\/code> \u6587\u4ef6\uff09\uff0c\u53c8\u5b8c\u7f8e\u89e3\u51b3\u4e86\u76d1\u63a7\u65e5\u5fd7\u7684\u53ef\u8bfb\u6027\u95ee\u9898\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e09\u5c42\uff1a\u6a21\u5f0f\u672c\u8d28\u2014\u2014\u8fd9\u4e3a\u4ec0\u4e48\u53eb\u201c\u9759\u6001\u4ee3\u7406\u201d\uff1f<\/h3>\n\n\n\n<p>\u5f88\u591a\u4eba\u8ba4\u4e3a\u53ea\u6709\u5199\u4e00\u4e2a <code>public class Proxy implements Interface<\/code> \u624d\u53eb\u9759\u6001\u4ee3\u7406\u3002\u5176\u5b9e\u4e0d\u7136\u3002<\/p>\n\n\n\n<p><strong>\u4ee3\u7406\u6a21\u5f0f\u7684\u6838\u5fc3\u5b9a\u4e49<\/strong>\uff1a<br>\u4e0d\u76f4\u63a5\u8bbf\u95ee\u5bf9\u8c61\uff0c\u800c\u662f\u8bbf\u95ee\u4e00\u4e2a<strong>\u4e2d\u95f4\u4eba\uff08Proxy\uff09<\/strong>\uff0c\u7531\u4e2d\u95f4\u4eba\u6765\u63a7\u5236\u5bf9\u539f\u5bf9\u8c61\u7684\u8bbf\u95ee\uff08\u589e\u5f3a\u3001\u62e6\u622a\u7b49\uff09\u3002<\/p>\n\n\n\n<p><strong>\u5bf9\u6bd4\u4e00\u4e0b\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f20\u7edf\u9759\u6001\u4ee3\u7406\uff08\u663e\u5f0f\u7c7b\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u4f60\u4e13\u95e8\u5199\u4e00\u4e2a <code>.java<\/code> \u6587\u4ef6\uff1a<code>class LogProxy implements Interface<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u7279\u70b9<\/strong>\uff1a\u4ee3\u7801\u5199\u6b7b\u5728\u7f16\u8bd1\u671f\uff0c\u590d\u7528\u6027\u9ad8\uff0c\u4f46\u7c7b\u6587\u4ef6\u591a\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u52a8\u6001\u4ee3\u7406\uff08JDK\/CGLIB\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u8fd0\u884c\u671f\u95f4\u52a8\u6001\u751f\u6210\u5b57\u8282\u7801\u3002<\/li>\n\n\n\n<li><strong>\u7279\u70b9<\/strong>\uff1a\u901a\u7528\u6027\u6781\u5f3a\uff0c\u4ee3\u7801\u91cf\u5c11\uff0c\u4f46\u903b\u8f91\u62bd\u8c61\uff0c\u8c03\u8bd5\u56f0\u96be\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Lambda\/\u533f\u540d\u7c7b\u5305\u88c5\uff08\u672c\u6587\u65b9\u6848\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li><strong>\u672c\u8d28<\/strong>\uff1a\u8fd9\u5c31\u662f\u4e00\u79cd<strong>\u201c\u73b0\u573a\u624b\u6413\u201d\u7684\u9759\u6001\u4ee3\u7406<\/strong>\u3002<\/li>\n\n\n\n<li>\u6211\u4eec\u5728 <code>setRejectedExecutionHandler<\/code> \u65b9\u6cd5\u5185\u90e8\uff0c\u73b0\u573a <code>new<\/code> \u4e86\u4e00\u4e2a\u63a5\u53e3\u5b9e\u73b0\u7c7b\u3002\u8fd9\u4e2a\u5b9e\u73b0\u7c7b\u7684\u903b\u8f91\u4e5f\u662f\u5199\u6b7b\u5728\u4ee3\u7801\u91cc\u7684\uff08\u7f16\u8bd1\u671f\u786e\u5b9a\uff09\uff0c\u53ea\u662f\u5b83\u6ca1\u6709\u540d\u5b57\uff08\u533f\u540d\uff09\u6216\u8005\u662f\u4e2a\u95ed\u5305\uff08Lambda\uff09\u3002<\/li>\n\n\n\n<li><strong>\u7279\u70b9<\/strong>\uff1a<strong>\u6781\u5ea6\u8f7b\u91cf<\/strong>\uff0c\u7528\u5b8c\u5373\u8d70\uff0c\u9002\u5408\u53ea\u5728\u4e00\u4e2a\u5730\u65b9\u4f7f\u7528\u7684\u589e\u5f3a\u903b\u8f91\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u6240\u4ee5\uff0c\u4f5c\u8005\u79f0\u4e4b\u4e3a\u201cLambda \u8f7b\u91cf\u7ea7\u9759\u6001\u4ee3\u7406\u201d\u662f\u975e\u5e38\u7cbe\u51c6\u7684\u3002\u5b83\u5177\u5907\u9759\u6001\u4ee3\u7406\u7684\u6240\u6709\u7279\u5f81\uff08\u7f16\u8bd1\u671f\u786e\u5b9a\u903b\u8f91\u3001\u5305\u88c5\u539f\u5bf9\u8c61\u3001\u589e\u5f3a\u529f\u80fd\uff09\uff0c\u53ea\u662f\u5f62\u5f0f\u4e0a\u66f4\u7b80\u6d01\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u56db\u5c42\uff1a\u5de5\u7a0b\u54f2\u5b66\u2014\u2014\u7b80\u5355\u5373\u6b63\u4e49 (KISS Principle)<\/h3>\n\n\n\n<p>\u8fd9\u4e00\u6bb5\u662f\u6574\u7bc7\u6587\u7ae0\u5347\u534e\u7684\u5730\u65b9\u3002<\/p>\n\n\n\n<p><strong>\u4e3a\u4ec0\u4e48\u8981\u4ece\u52a8\u6001\u4ee3\u7406\u6539\u56de Lambda\uff1f<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\"\u7b80\u5355\u5373\u6b63\u4e49\uff0c\u4f18\u5148\u9009\u62e9\u53ef\u8bfb\u6027\u5f3a\u3001\u7ef4\u62a4\u6210\u672c\u4f4e\u7684\u5b9e\u73b0\u65b9\u5f0f\u3002\"<\/p>\n<\/blockquote>\n\n\n\n<p>\u5728\u5b9e\u9645\u5f00\u53d1\u4e2d\uff0c\u6211\u4eec\u7ecf\u5e38\u4f1a\u9677\u5165\u201c\u6280\u672f\u81ea\u55e8\u201d\u3002\u89c9\u5f97\u7528\u4e86\u53cd\u5c04\u3001\u7528\u4e86\u5b57\u8282\u7801\u589e\u5f3a\u3001\u7528\u4e86 AOP \u663e\u5f97\u5f88\u9ad8\u5927\u4e0a\u3002<br>\u4f46\u5728 <code>oneThread<\/code> \u8fd9\u4e2a\u7279\u5b9a\u573a\u666f\u4e0b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u63a5\u53e3\u5355\u4e00<\/strong>\uff1a\u53ea\u589e\u5f3a <code>RejectedExecutionHandler<\/code> \u8fd9\u4e00\u4e2a\u63a5\u53e3\u3002<\/li>\n\n\n\n<li><strong>\u65b9\u6cd5\u5355\u4e00<\/strong>\uff1a\u53ea\u589e\u5f3a <code>rejectedExecution<\/code> \u8fd9\u4e00\u4e2a\u65b9\u6cd5\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u8fd9\u65f6\u5019\u7528\u52a8\u6001\u4ee3\u7406\uff0c\u5c5e\u4e8e<strong>\u8fc7\u5ea6\u8bbe\u8ba1<\/strong>\u3002\u4f7f\u7528 Lambda\/\u533f\u540d\u5185\u90e8\u7c7b\uff0c\u4ee3\u7801\u6e05\u6670\u5ea6\u4e00\u76ee\u4e86\u7136\uff0c\u4efb\u4f55\u4e00\u4e2a\u521a\u5165\u804c\u7684\u521d\u7ea7\u5de5\u7a0b\u5e08\u90fd\u80fd\u770b\u61c2\u8fd9\u6bb5\u4ee3\u7801\u5728\u5e72\u4ec0\u4e48\uff08\u5c31\u662f\u5728\u6267\u884c\u524d\u52a0\u4e86\u4e2a\u8ba1\u6570\uff09\u3002<\/p>\n\n\n\n<p><strong>\u603b\u7ed3\u4f5c\u8005\u7684\u51b3\u7b56\u903b\u8f91\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5b66\u4e60\u5c42\u9762<\/strong>\uff1a\u52a8\u6001\u4ee3\u7406\u503c\u5f97\u5b66\uff0c\u56e0\u4e3a\u5b83\u80fd\u89e3\u51b3\u901a\u7528\u590d\u6742\u95ee\u9898\uff08\u5982 MyBatis \u7684 Mapper \u4ee3\u7406\uff09\u3002<\/li>\n\n\n\n<li><strong>\u843d\u5730\u5c42\u9762<\/strong>\uff1a\u5bf9\u4e8e\u7b80\u5355\u573a\u666f\uff0c<strong>\u53ef\u8bfb\u6027 > \u70ab\u6280<\/strong>\u3002Lambda \u5305\u88c5\u80dc\u51fa\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u901a\u900f\u603b\u7ed3<\/h3>\n\n\n\n<p>\u8fd9\u5c31\u597d\u6bd4\u4f60\u8981\u7ed9\u624b\u673a\u8d34\u4e2a\u819c\uff08\u589e\u5f3a\u9632\u62a4\uff09\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f20\u7edf\u9759\u6001\u4ee3\u7406<\/strong>\uff1a\u5de5\u5382\u91cc\u4e13\u95e8\u5f00\u4e00\u6761\u751f\u4ea7\u7ebf\uff0c\u751f\u4ea7\u4e00\u6b3e\u201c\u5e26\u819c\u7684\u624b\u673a\u58f3\u201d\uff0c\u4f60\u628a\u624b\u673a\u585e\u8fdb\u53bb\u3002<\/li>\n\n\n\n<li><strong>\u52a8\u6001\u4ee3\u7406<\/strong>\uff1a\u5236\u9020\u4e00\u53f0\u9ad8\u79d1\u6280\u7eb3\u7c73\u55b7\u6d82\u673a\uff0c\u628a\u624b\u673a\u653e\u8fdb\u53bb\uff0c\u81ea\u52a8\u751f\u6210\u4e00\u5c42\u819c\u3002<\/li>\n\n\n\n<li><strong>Lambda\/\u533f\u540d\u7c7b<\/strong>\uff1a\u4f60\u81ea\u5df1\u4e70\u5f20\u819c\uff0c<strong>\u624b\u52a8\u8d34\u4e0a\u53bb<\/strong>\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u5bf9\u4e8e\u201c\u53ea\u8d34\u4e00\u5f20\u819c\u201d\u8fd9\u4ef6\u5c0f\u4e8b\u6765\u8bf4\uff0c\u663e\u7136<strong>\u624b\u52a8\u8d34\uff08Lambda \u65b9\u6848\uff09<\/strong>\u662f\u6700\u5feb\u3001\u6700\u7701\u6210\u672c\u3001\u6700\u5bb9\u6613\u7406\u89e3\u7684\u65b9\u5f0f\u3002\u53ea\u6709\u5f53\u4f60\u9700\u8981\u7ed9\u4e00\u4e07\u79cd\u4e0d\u540c\u578b\u53f7\u7684\u8bbe\u5907\u8d34\u819c\u65f6\uff0c\u52a8\u6001\u4ee3\u7406\u90a3\u53f0\u673a\u5668\u624d\u6709\u4ef7\u503c\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u62d2\u7edd\u7b56\u7565\u6267\u884c\u6b21\u6570\u7684\u5b58\u50a8<\/h3>\n\n\n\n<p>\u4e3a\u4e86\u652f\u6301\u76d1\u63a7\uff0c\u9700\u8981\u6709\u4e00\u4e2a\u5730\u65b9\u5b58\u50a8\u62d2\u7edd\u6b21\u6570\u3002<\/p>\n\n\n\n<p><strong>\u4ee3\u7801\u4f4d\u7f6e<\/strong>\uff1a<br><code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/OneThreadExecutor.java<\/code><\/p>\n\n\n\n<p>\u5728\u8be5\u7c7b\u4e2d\u5b9a\u4e49\u4e86\u4e00\u4e2a\u539f\u5b50\u53d8\u91cf\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Getter\nprivate final AtomicLong rejectCount = new AtomicLong();<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u5f02\u6b65\u544a\u8b66\u673a\u5236 (Alarm Checker)<\/h3>\n\n\n\n<p>\u6587\u7ae0\u63d0\u5230\u4e86\u4e00\u4e2a\u5173\u952e\u7684\u8bbe\u8ba1\u51b3\u7b56\uff1a<strong>\u4e0d\u8981\u5728\u62d2\u7edd\u53d1\u751f\u65f6\u540c\u6b65\u62a5\u8b66\uff0c\u800c\u662f\u91c7\u7528\u5f02\u6b65\u8f6e\u8be2\u3002<\/strong><br>\u7406\u7531\u662f\uff1a\u62d2\u7edd\u7b56\u7565\u901a\u5e38\u662f\u9ad8\u5e76\u53d1\u77ac\u95f4\u53d1\u751f\u7684\uff0c\u540c\u6b65\u62a5\u8b66\u4f1a\u963b\u585e\u4e1a\u52a1\u7ebf\u7a0b\uff0c\u751a\u81f3\u5bfc\u81f4\u62a5\u8b66\u6d2a\u5cf0\u3002<\/p>\n\n\n\n<p><strong>\u5b9e\u73b0\u903b\u8f91<\/strong>\uff1a\u4f7f\u7528\u4e00\u4e2a\u5b9a\u65f6\u4efb\u52a1\uff0c\u5b9a\u671f\u68c0\u67e5\u6240\u6709\u7ebf\u7a0b\u6c60\u7684 <code>rejectCount<\/code> \u662f\u5426\u589e\u52a0\u3002<\/p>\n\n\n\n<p><strong>\u4ee3\u7801\u4f4d\u7f6e\u63a8\u6d4b<\/strong>\uff1a<br>\u6839\u636e\u76ee\u5f55\u7ed3\u6784\uff0c\u62a5\u8b66\u903b\u8f91\u4f4d\u4e8e <code>alarm<\/code> \u5305\u4e0b\u3002<br><code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/alarm\/<\/code><\/p>\n\n\n\n<p>\u867d\u7136\u6587\u4ef6\u5217\u8868\u4e2d\u672a\u76f4\u63a5\u5217\u51fa <code>ThreadPoolAlarmChecker.java<\/code>\uff0c\u4f46\u6839\u636e\u6587\u4e2d\u63cf\u8ff0\u548c\u5305\u7ed3\u6784\uff0c\u8be5\u7c7b\u5e94\u4f4d\u4e8e\u6b64\u5904\u3002\u5b83\u4f9d\u8d56\u4ee5\u4e0b\u7ec4\u4ef6\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6ce8\u518c\u4e2d\u5fc3<\/strong>\uff1a<code>OneThreadRegistry<\/code>\uff0c\u7528\u4e8e\u83b7\u53d6\u5f53\u524d\u5e94\u7528\u4e2d\u6240\u6709\u7684\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\u3002\n<ul class=\"wp-block-list\">\n<li>\u4f4d\u7f6e\uff1a<code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/OneThreadRegistry.java<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u6301\u6709\u8005<\/strong>\uff1a<code>ThreadPoolExecutorHolder<\/code>\uff0c\u5305\u88c5\u4e86\u7ebf\u7a0b\u6c60\u5b9e\u4f8b\u548c\u914d\u7f6e\u4fe1\u606f\u3002\n<ul class=\"wp-block-list\">\n<li>\u4f4d\u7f6e\uff1a<code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/ThreadPoolExecutorHolder.java<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>AlarmChecker \u6838\u5fc3\u903b\u8f91<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u4f2a\u4ee3\u7801\u903b\u8f91\uff0c\u4f4d\u4e8e alarm \u5305\u4e0b\u7684\u68c0\u67e5\u7c7b\u4e2d\nprivate void checkRejectCount(ThreadPoolExecutorHolder holder) {\n    \/\/ 1. \u83b7\u53d6\u5f53\u524d\u62d2\u7edd\u603b\u6570\n    long currentRejectCount = oneThreadExecutor.getRejectCount().get();\n    \/\/ 2. \u83b7\u53d6\u4e0a\u6b21\u8bb0\u5f55\u7684\u62d2\u7edd\u6570\n    long lastRejectCount = lastRejectCountMap.getOrDefault(threadPoolId, 0L);\n\n    \/\/ 3. \u5982\u679c\u5f53\u524d &gt; \u4e0a\u6b21\uff0c\u8bf4\u660e\u4e5f\u5c31\u662f\u5728\u8fd9\u4e2a\u65f6\u95f4\u5468\u671f\u5185\u53d1\u751f\u4e86\u62d2\u7edd\n    if (currentRejectCount &gt; lastRejectCount) {\n        \/\/ 4. \u53d1\u9001\u62a5\u8b66\n        sendAlarmMessage(\"Reject\", holder);\n        \/\/ 5. \u66f4\u65b0\u7f13\u5b58\n        lastRejectCountMap.put(threadPoolId, currentRejectCount);\n    }\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">5. \u603b\u7ed3<\/h3>\n\n\n\n<p><code>onethread<\/code> \u9879\u76ee\u901a\u8fc7\u4ee5\u4e0b\u6b65\u9aa4\u5b9e\u73b0\u4e86\u4f18\u96c5\u7684\u62d2\u7edd\u7b56\u7565\u76d1\u63a7\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6269\u5c55 JDK \u7ebf\u7a0b\u6c60<\/strong>\uff1a\u5728 <code>core\/...\/executor\/OneThreadExecutor.java<\/code> \u4e2d\u7ee7\u627f <code>ThreadPoolExecutor<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u900f\u660e\u589e\u5f3a<\/strong>\uff1a\u91cd\u5199 <code>setRejectedExecutionHandler<\/code>\uff0c\u5229\u7528<strong>\u533f\u540d\u5185\u90e8\u7c7b<\/strong>\uff08\u8f7b\u91cf\u7ea7\u4ee3\u7406\uff09\u5305\u88f9\u7528\u6237\u7684\u62d2\u7edd\u7b56\u7565\uff0c\u690d\u5165 <code>rejectCount<\/code> \u81ea\u589e\u903b\u8f91\u3002<\/li>\n\n\n\n<li><strong>\u72b6\u6001\u5b58\u50a8<\/strong>\uff1a\u5728 <code>OneThreadExecutor<\/code> \u5185\u90e8\u7ef4\u62a4 <code>AtomicLong rejectCount<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u89e3\u8026\u544a\u8b66<\/strong>\uff1a\u5728 <code>core\/...\/alarm\/<\/code> \u5305\u4e0b\u5b9e\u73b0\u5b9a\u65f6\u4efb\u52a1\uff08<code>ThreadPoolAlarmChecker<\/code>\uff09\uff0c\u901a\u8fc7 <code>OneThreadRegistry<\/code> \u904d\u5386\u6240\u6709\u7ebf\u7a0b\u6c60\uff0c\u5bf9\u6bd4 <code>rejectCount<\/code> \u7684\u53d8\u5316\u6765\u89e6\u53d1\u544a\u8b66\uff0c\u907f\u514d\u5f71\u54cd\u4e3b\u4e1a\u52a1\u6027\u80fd\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u8fd9\u79cd\u8bbe\u8ba1\u65e2\u4fdd\u8bc1\u4e86\u5bf9\u4e1a\u52a1\u4ee3\u7801\u7684<strong>\u65e0\u4fb5\u5165\u6027<\/strong>\uff08\u7528\u6237\u53ea\u9700\u4f7f\u7528 <code>OneThreadExecutor<\/code>\uff09\uff0c\u53c8\u5b9e\u73b0\u4e86\u9ad8\u53ef\u7528\u7684\u76d1\u63a7\u544a\u8b66\u3002<\/p>\n\n\n\n<p>\u57fa\u4e8e\u6587\u7ae0\u5185\u5bb9\u548c\u63d0\u4f9b\u7684\u76ee\u5f55\u7ed3\u6784\uff0c\u9664\u4e86\u6838\u5fc3\u7684\u201c\u4ee3\u7406\u6a21\u5f0f\u6f14\u8fdb\u201d\u548c\u201c\u544a\u8b66\u903b\u8f91\u201d\u5916\uff0c\u8fd8\u6709\u4ee5\u4e0b <strong>4 \u4e2a\u5173\u952e\u7ec6\u8282<\/strong> \u9700\u8981\u8865\u5145\u3002\u8fd9\u4e9b\u7ec6\u8282\u4e3b\u8981\u6d89\u53ca<strong>\u5de5\u7a0b\u5b9e\u73b0\u7684\u4e25\u8c28\u6027<\/strong>\u548c<strong>\u4ee3\u7801\u7ed3\u6784\u7684\u652f\u6491\u8bbe\u8ba1<\/strong>\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <code>toString<\/code> \u65b9\u6cd5\u91cd\u5199\u7684\u5fc5\u8981\u6027\uff08\u53ef\u89c2\u6d4b\u6027\u7ec6\u8282\uff09<\/h3>\n\n\n\n<p>\u6587\u7ae0\u4e13\u95e8\u82b1\u7bc7\u5e45\u63d0\u5230\u4e86 Lambda\/\u533f\u540d\u5185\u90e8\u7c7b\u7684\u4e00\u4e2a\u201c\u5751\u201d\uff1a\u65e5\u5fd7\u53ef\u8bfb\u6027\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7ec6\u8282<\/strong>\uff1a<br>\u5982\u679c\u4f60\u76f4\u63a5\u4f7f\u7528 Lambda (<code>(r, e) -&gt; { ... }<\/code>)\uff0c\u5728\u65e5\u5fd7\u6216\u8c03\u8bd5\u4e2d\u6253\u5370\u7ebf\u7a0b\u6c60\u7684\u62d2\u7edd\u7b56\u7565\u65f6\uff0c\u4f1a\u663e\u793a\u7c7b\u4f3c <code>com.nageoffer...$$Lambda$758\/0x00...<\/code> \u7684\u4e71\u7801\u3002\u8fd9\u5bf9\u8fd0\u7ef4\u6392\u67e5\u6781\u5176\u4e0d\u53cb\u597d\uff0c\u65e0\u6cd5\u533a\u5206\u5f53\u524d\u5230\u5e95\u662f <code>AbortPolicy<\/code> \u8fd8\u662f <code>CallerRunsPolicy<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u89e3\u51b3\u65b9\u6848<\/strong>\uff1a<br>\u5728 <code>OneThreadExecutor.java<\/code> \u7684 <code>setRejectedExecutionHandler<\/code> \u4e2d\uff0c\u4e0d\u4ec5\u4ec5\u662f\u5305\u88c5\u903b\u8f91\uff0c\u8fd8<strong>\u5fc5\u987b<\/strong>\u91cd\u5199 <code>toString()<\/code> \u65b9\u6cd5\u3002<\/li>\n\n\n\n<li><strong>\u4ee3\u7801\u5bf9\u5e94<\/strong>\uff1a <code>\/\/ core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/OneThreadExecutor.java \/\/ ... \u5728\u533f\u540d\u5185\u90e8\u7c7b\u4e2d ... @Override public String toString() { \/\/ \u5173\u952e\u70b9\uff1a\u8fd4\u56de\u539f\u59cb handler \u7684\u7c7b\u540d\uff0c\u4fdd\u6301\u65e5\u5fd7\u6e05\u6670 return handler.getClass().getSimpleName(); }<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u544a\u8b66\u68c0\u67e5\u7684\u201c\u6ce8\u518c\u4e2d\u5fc3\u201d\u673a\u5236<\/h3>\n\n\n\n<p>\u6587\u7ae0\u4e2d\u7684 <code>ThreadPoolAlarmChecker<\/code> \u662f\u901a\u8fc7 <code>OneThreadRegistry.getAllHolders()<\/code> \u83b7\u53d6\u6240\u6709\u7ebf\u7a0b\u6c60\u7684\u3002\u8fd9\u63ed\u793a\u4e86\u6846\u67b6\u80cc\u540e\u7684<strong>\u5bb9\u5668\u5316\u7ba1\u7406\u601d\u60f3<\/strong>\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8865\u5145\u89e3\u8bfb<\/strong>\uff1a<br>\u62a5\u8b66\u6a21\u5757\u5e76\u4e0d\u76f4\u63a5\u6301\u6709\u7ebf\u7a0b\u6c60\u5f15\u7528\uff0c\u800c\u662f\u4f9d\u8d56\u4e00\u4e2a\u9759\u6001\u7684\u6ce8\u518c\u4e2d\u5fc3\u3002\u8fd9\u610f\u5473\u7740\u5f53\u4f60\u521b\u5efa <code>OneThreadExecutor<\/code> \u65f6\uff0c\u5b83\u5e94\u8be5\u88ab\u81ea\u52a8\u6ce8\u518c\u5230\u4e86\u8fd9\u4e2a Registry \u4e2d\uff08\u901a\u5e38\u662f\u5728\u6784\u9020\u51fd\u6570\u6216 Spring Bean \u521d\u59cb\u5316\u65f6\uff09\u3002<\/li>\n\n\n\n<li><strong>\u6587\u4ef6\u4f4d\u7f6e\u5173\u8054<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li><strong>\u6ce8\u518c\u4e2d\u5fc3<\/strong>\uff1a<code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/OneThreadRegistry.java<\/code><\/li>\n\n\n\n<li><strong>\u6301\u6709\u8005\u5bf9\u8c61<\/strong>\uff1a<code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/ThreadPoolExecutorHolder.java<\/code><\/li>\n\n\n\n<li><strong>\u914d\u7f6e\u5c5e\u6027<\/strong>\uff1a\u6587\u7ae0\u4ee3\u7801\u4e2d\u51fa\u73b0\u4e86 <code>holder.getExecutorProperties().getAlarm().getEnable()<\/code>\uff0c\u8fd9\u5bf9\u5e94\u6587\u4ef6\u6811\u4e2d\u7684 <code>core\/src\/main\/java\/com\/nageoffer\/onethread\/core\/executor\/ThreadPoolExecutorProperties.java<\/code>\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u544a\u8b66\u7684\u201c\u8bfb\u5199\u5206\u79bb\u201d\u8bbe\u8ba1<\/h3>\n\n\n\n<p>\u6587\u7ae0\u4e2d\u63d0\u5230\u4e86\u201c\u5373\u65f6\u544a\u8b66\u201d\u4e0e\u201c\u5b9a\u65f6\u626b\u63cf\u201d\u7684\u5bf9\u6bd4\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2a\u9690\u542b\u7684<strong>\u6027\u80fd\u5e76\u53d1\u8bbe\u8ba1<\/strong>\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5199\u8def\u5f84\uff08\u9ad8\u5e76\u53d1\uff09<\/strong>\uff1a \u4e1a\u52a1\u7ebf\u7a0b\u89e6\u53d1\u62d2\u7edd\u7b56\u7565 -&gt; \u8c03\u7528 <code>OneThreadExecutor<\/code> \u7684 <code>rejectedExecution<\/code> -&gt; \u4ec5\u4ec5\u6267\u884c <code>AtomicLong.incrementAndGet()<\/code>\u3002\n<ul class=\"wp-block-list\">\n<li><strong>\u8865\u5145<\/strong>\uff1a\u8fd9\u662f\u4e00\u4e2a\u6781\u4f4e\u5f00\u9500\u7684 CPU \u6307\u4ee4\uff08CAS\uff09\uff0c\u51e0\u4e4e\u4e0d\u963b\u585e\u4e1a\u52a1\u7ebf\u7a0b\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u8bfb\u8def\u5f84\uff08\u4f4e\u9891\uff09<\/strong>\uff1a<br><code>ThreadPoolAlarmChecker<\/code> \u7ebf\u7a0b -&gt; \u5b9a\u65f6\u8bfb\u53d6 <code>rejectCount.get()<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u8865\u5145\u603b\u7ed3<\/strong>\uff1a<br>\u8fd9\u79cd\u8bbe\u8ba1\u907f\u514d\u4e86\u5728\u62d2\u7edd\u4efb\u52a1\uff08\u672c\u5c31\u5df2\u7ecf\u7cfb\u7edf\u8fc7\u8f7d\uff09\u7684\u5173\u952e\u65f6\u523b\u53bb\u6267\u884c\u8017\u65f6\u7684\u201c\u53d1\u9001\u7f51\u7edc\u62a5\u8b66\u201d\u64cd\u4f5c\uff0c\u9632\u6b62\u96ea\u4e0a\u52a0\u971c\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u52a8\u6001\u4ee3\u7406 vs Lambda \u7684\u201c\u5de5\u7a0b\u54f2\u5b66\u201d<\/h3>\n\n\n\n<p>\u6587\u7ae0\u6700\u540e\u4e00\u6bb5\u7684\u5bf9\u6bd4\u975e\u5e38\u6709\u4ef7\u503c\uff0c\u8865\u5145\u4e86<strong>\u6280\u672f\u9009\u578b\u7684\u5fc3\u6cd5<\/strong>\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8865\u5145\u89e3\u8bfb<\/strong>\uff1a \u867d\u7136\u6587\u7ae0\u6f14\u793a\u4e86 <code>JDK Dynamic Proxy<\/code>\uff0c\u4f46\u6700\u7ec8\u629b\u5f03\u4e86\u5b83\u3002\u4f5c\u8005\u5f3a\u8c03\u201c\u7b80\u5355\u5373\u6b63\u4e49\u201d\u3002\n<ul class=\"wp-block-list\">\n<li><strong>\u52a8\u6001\u4ee3\u7406<\/strong>\uff1a\u9002\u5408\u901a\u7528\u7684\u3001\u672a\u77e5\u7684\u63a5\u53e3\u589e\u5f3a\uff0c\u4f46\u6d89\u53ca\u53cd\u5c04\uff0c\u5806\u6808\u6df1\uff0c\u8c03\u8bd5\u590d\u6742\u3002<\/li>\n\n\n\n<li><strong>Lambda\/\u533f\u540d\u7c7b<\/strong>\uff1a\u9002\u5408<strong>\u5df2\u77e5\u63a5\u53e3<\/strong>\uff08\u8fd9\u91cc\u5c31\u662f\u660e\u786e\u7684 <code>RejectedExecutionHandler<\/code>\uff09\u7684\u7279\u5b9a\u589e\u5f3a\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u7ed3\u8bba<\/strong>\uff1a<br>\u5728 <code>OneThreadExecutor.java<\/code> \u4e2d\uff0c\u4f60\u770b\u4e0d\u5230\u590d\u6742\u7684 <code>InvocationHandler<\/code> \u8c03\u7528\uff0c\u800c\u662f\u76f4\u63a5\u5185\u8054\u7684\u533f\u540d\u7c7b\uff0c\u8fd9\u662f\u4e3a\u4e86<strong>\u964d\u4f4e\u7ef4\u62a4\u6210\u672c<\/strong>\u548c<strong>\u51cf\u5c11\u8fd0\u884c\u65f6\u5f00\u9500<\/strong>\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u603b\u7ed3\u56fe\u8c31\uff08\u57fa\u4e8e\u6587\u7ae0\u9650\u5b9a\uff09<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u5173\u6ce8\u70b9<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u6838\u5fc3\u903b\u8f91 (\u5df2\u8bb2)<\/th><th class=\"has-text-align-left\" data-align=\"left\"><strong>\u8865\u5145\u7ec6\u8282 (\u672c\u6b21\u8865\u5145)<\/strong><\/th><th class=\"has-text-align-left\" data-align=\"left\">\u6d89\u53ca\u6587\u4ef6 (Core \u6a21\u5757)<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u589e\u5f3a\u65b9\u5f0f<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9759\u6001\u4ee3\u7406 -&gt; \u52a8\u6001\u4ee3\u7406 -&gt; Lambda<\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u91cd\u5199 <code>toString<\/code> \u4fdd\u8bc1\u65e5\u5fd7\u53ef\u8bfb\u6027<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>OneThreadExecutor.java<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u7ba1\u7406\u65b9\u5f0f<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">-<\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>Registry \u7edf\u4e00\u7ba1\u7406\uff0cHolder \u5c01\u88c5\u914d\u7f6e<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>OneThreadRegistry.java<\/code><br><code>ThreadPoolExecutorProperties.java<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u544a\u8b66\u673a\u5236<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5b9a\u65f6\u4efb\u52a1\u626b\u63cf<\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u8bfb\u5199\u5206\u79bb\u8bbe\u8ba1\uff0c\u907f\u514d\u52a0\u91cd\u8fc7\u8f7d<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>alarm<\/code> \u5305 (\u63a8\u6d4b)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u8bbe\u8ba1\u54f2\u5b66<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">-<\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u5f03\u7528\u52a8\u6001\u4ee3\u7406\uff0c\u9009\u62e9\u7531\u7b80\u5165\u7e41<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">-<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u5178\u578b\u7684\u4e2d\u95f4\u4ef6\u5f00\u53d1\u573a\u666f\uff1a\u5982\u4f55\u5bf9\u201c\u9ed1\u76d2\u201d\u7684\u7ebf\u7a0b\u6c60\u8fdb\u884c\u900f\u660e\u5316\u7684\u76d1\u63a7\u548c\u6cbb\u7406\u3002 \u7ed3\u5408\u4f60\u63d0\u4f9b\u7684\u9879\u76ee\u76ee\u5f55\u7ed3\u6784\u548c\u6587\u7ae0\u5185\u5bb9\uff0c\u6211\u5c06\u4e3a\u4f60\u68b3\u7406 &#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-1620","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\/1620","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=1620"}],"version-history":[{"count":41,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1620\/revisions"}],"predecessor-version":[{"id":1683,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1620\/revisions\/1683"}],"wp:attachment":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}