{"status":"ok","count":12,"count_total":248,"pages":21,"posts":[{"id":2921,"type":"post","slug":"mysql%e8%bf%9b%e9%98%b6%e5%85%ad-%e4%b8%bb%e4%bb%8e%e5%a4%8d%e5%88%b6%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93","url":"https:\/\/qkongtao.cn\/?p=2921","status":"publish","title":"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93","title_plain":"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93","content":"<h2 id=\"h2-0\">\u4e3b\u4ece\u590d\u5236<\/h2>\n<h3 id=\"h3-1\">\u6982\u8ff0<\/h3>\n<p>\u4e3b\u4ece\u590d\u5236\u662f\u6307\u5c06\u4e3b\u6570\u636e\u5e93\u7684DDL \u548c DML \u64cd\u4f5c\u901a\u8fc7\u4e8c\u8fdb\u5236\u65e5\u5fd7\u4f20\u5230\u4ece\u5e93\u670d\u52a1\u5668\u4e2d\uff0c\u7136\u540e\u5728\u4ece\u5e93\u4e0a\u5bf9\u8fd9\u4e9b\u65e5\u5fd7\u91cd\u65b0\u6267\u884c\uff08\u4e5f\u53eb\u91cd\u505a\uff09\uff0c\u4ece\u800c \u4f7f\u5f97\u4ece\u5e93\u548c\u4e3b\u5e93\u7684\u6570\u636e\u4fdd\u6301\u540c\u6b65\u3002<br \/>\nMySQL\u652f\u6301\u4e00\u53f0\u4e3b\u5e93\u540c\u65f6\u5411\u591a\u53f0\u4ece\u5e93\u8fdb\u884c\u590d\u5236\uff0c \u4ece\u5e93\u540c\u65f6\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u5176\u4ed6\u4ece\u670d\u52a1\u5668\u7684\u4e3b\u5e93\uff0c\u5b9e\u73b0\u94fe\u72b6\u590d\u5236\u3002<br \/>\nMySQL \u590d\u5236\u7684\u4e3b\u8981\u7279\u70b9\u5305\u542b\u4ee5\u4e0b\u4e09\u4e2a\u65b9\u9762\uff1a<\/p>\n<ol>\n<li>\u4e3b\u5e93\u51fa\u73b0\u95ee\u9898\uff0c\u53ef\u4ee5\u5feb\u901f\u5207\u6362\u5230\u4ece\u5e93\u63d0\u4f9b\u670d\u52a1<\/li>\n<li>\u5b9e\u73b0\u8bfb\u5199\u5206\u79bb\uff0c\u964d\u4f4e\u4e3b\u5e93\u7684\u8bbf\u95ee\u538b\u529b<\/li>\n<li>\u53ef\u4ee5\u5728\u4ece\u5e93\u4e2d\u6267\u884c\u5907\u4efd\uff0c\u4ee5\u907f\u514d\u5907\u4efd\u671f\u95f4\u5f71\u54cd\u4e3b\u5e93\u670d\u52a1<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-003936-00.png\" alt=\"20260305-003936-00.png\" \/><\/li>\n<\/ol>\n<h3 id=\"h3-2\">\u539f\u7406<\/h3>\n<p>MySQL\u4e3b\u4ece\u590d\u5236\u539f\u7406\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-003952-we.png\" alt=\"20260305-003952-we.png\" \/><br \/>\n\u4ece\u4e0a\u56fe\u6765\u770b\uff0c\u590d\u5236\u5206\u6210\u4e09\u6b65\uff1a<\/p>\n<ol>\n<li>Master \u4e3b\u5e93\u5728\u4e8b\u52a1\u63d0\u4ea4\u65f6\uff0c\u4f1a\u628a\u6570\u636e\u53d8\u66f4\u8bb0\u5f55\u5728\u4e8c\u8fdb\u5236\u65e5\u5fd7\u6587\u4ef6 Binlog\uff08\u8bb0\u5f55\u539f\u59cb SQL \u8bed\u53e5 \uff09\u4e2d<\/li>\n<li>\u4ece\u5e93\u7684IO\u7ebf\u7a0b\u8bfb\u53d6\u4e3b\u5e93\u7684\u4e8c\u8fdb\u5236\u65e5\u5fd7\u6587\u4ef6 Binlog \uff0c\u5199\u5165\u5230\u4ece\u5e93\u7684\u4e2d\u7ee7\u65e5\u5fd7 Relay Log<\/li>\n<li>slave\u7684SQL\u7ebf\u7a0b\u91cd\u505a\u4e2d\u7ee7\u65e5\u5fd7\u4e2d\u7684\u4e8b\u4ef6\uff0c\u5373\u8bfb\u53d6\u4e2d\u7ee7\u65e5\u5fd7\u4e2d\u7684 SQL \u8bed\u53e5\u5e76\u6267\u884c\uff0c\u5c06\u6539\u53d8\u53cd\u6620\u5b83\u81ea\u5df1\u7684\u6570\u636e<\/li>\n<\/ol>\n<h3 id=\"h3-3\">\u642d\u5efa\u5b9e\u73b0<\/h3>\n<h4>\u4e3b\u5e93\u914d\u7f6e<\/h4>\n<ol>\n<li>\u4fee\u6539\u914d\u7f6e\u6587\u4ef6 \/etc\/my.cnf<\/li>\n<\/ol>\n<pre>#mysql\u670d\u52a11D\uff0c\u4fdd\u8bc1\u6574\u4e2a\u96c6\u7fa4\u73af\u5883\u4e2d\u552f\u4e00\uff0c\u53d6\u503c\u8303\u56f4\uff1a1-232-1\uff0c\u9ed8\u8ba4\u4e3a1\nserver-id=1\n#\u662f\u5426\u53ea\u8bfb,1\u4ee3\u8868\u53ea\u8bfb,0\u4ee3\u8868\u8bfb\u5199\nread-only=0\n#\u5ffd\u7565\u7684\u6570\u636e\uff0c\u6307\u4e0d\u9700\u8981\u540c\u6b65\u7684\u6570\u636e\u5e93\n#binlog-ignore-db=mysql\n#\u6307\u5b9a\u540c\u6b65\u7684\u6570\u636e\u5e93\n#binlog-do-db=db01<\/pre>\n<ol start=\"2\">\n<li>\u91cd\u542fMySQL\u670d\u52a1\u5668<\/li>\n<\/ol>\n<pre>systemctl restart mysqld<\/pre>\n<ol start=\"3\">\n<li>\u767b\u5f55mysql\uff0c\u521b\u5efa\u8fdc\u7a0b\u8fde\u63a5\u7684\u8d26\u53f7\uff0c\u5e76\u6388\u4e88\u4e3b\u4ece\u590d\u5236\u6743\u9650<\/li>\n<\/ol>\n<pre>#\u521b\u5efaitcast\u7528\u6237\uff0c\u5e76\u8bbe\u7f6e\u5bc6\u7801\uff0c\u8be5\u7528\u6237\u53ef\u5728\u4efb\u610f\u4e3b\u673a\u8fde\u63a5\u8be5MySQL\u670d\u52a1\nCREATE USER &#039;itcast&#039;@&#039;%&#039; IDENTIFIED WITH mysql_native_password BY Root@123456\uff1b\n#\u4e3a &#039;itcast&#039;@&#039;%\u2019 \u7528\u6237\u5206\u914d\u4e3b\u4ece\u590d\u5236\u6743\u9650\nGRANT REPLICATION SLAVE ON *.* TO &#039;itcast&#039;@&#039;%&#039;;<\/pre>\n<ol start=\"4\">\n<li>\u901a\u8fc7\u6307\u4ee4\uff0c\u67e5\u770b\u4e8c\u8fdb\u5236\u65e5\u5fd7\u5750\u6807<\/li>\n<\/ol>\n<pre>show master status;<\/pre>\n<p>\u5b57\u6bb5\u542b\u4e49\u8bf4\u660e\uff1a<br \/>\nfile\uff1a\u4ece\u54ea\u4e2a\u65e5\u5fd7\u6587\u4ef6\u5f00\u59cb\u63a8\u9001\u65e5\u5fd7\u6587\u4ef6<br \/>\nposition \u4ece\u54ea\u4e2a\u4f4d\u7f6e\u5f00\u59cb\u63a8\u9001\u65e5\u5fd7<br \/>\nbinlog_ignore_db\uff1a\u6307\u5b9a\u4e0d\u9700\u8981\u540c\u6b65\u7684\u6570\u636e\u5e93<br \/>\nbinlog.000003<\/p>\n<h4>\u4ece\u5e93\u914d\u7f6e<\/h4>\n<p>1.\u4fee\u6539\u914d\u7f6e\u6587\u4ef6 \/etc\/my.cnf<\/p>\n<pre>#mysql \u670d\u52a1ID\uff0c\u4fdd\u8bc1\u6574\u4e2a\u96c6\u7fa4\u73af\u5883\u4e2d\u552f\u4e00\uff0c\u53d6\u503c\u8303\u56f4\uff1a1-232-1\uff0c\u548c\u4e3b\u5e93\u4e0d\u4e00\u6837\u5373\u53ef\nserver-id=2\n#\u662f\u5426\u53ea\u8bfb,1\u4ee3\u8868\u53ea\u8bfb\uff0c0\u4ee3\u8868\u8bfb\u5199\nread-only=1<\/pre>\n<ol start=\"2\">\n<li>\u91cd\u65b0\u542f\u52a8MySQL\u670d\u52a1<\/li>\n<\/ol>\n<pre>systemctl restart mysqld<\/pre>\n<p>\u8bbe\u7f6eread_only=1\u540e\uff0c\u8d85\u7ea7\u7ba1\u7406\u5458\u4e0d\u662f\u53ea\u8bfb\uff0c\u5982\u679c\u60f3\u8981\u8ba9\u8d85\u7ea7\u7ba1\u7406\u5458\u4e5f\u662f\u53ea\u8bfb\uff0c\u5c31\u9700\u8981\u989d\u5916\u914d\u7f6esuper_read_only=1<\/p>\n<ol start=\"3\">\n<li>\u767b\u5f55mysql\uff0c\u8bbe\u7f6e\u4e3b\u5e93\u914d\u7f6e<\/li>\n<\/ol>\n<pre>CHANGE REPLICATION SOURCE TO SOURCE_HOST= &#039;xxx.xxx&#039;, SOURCE USER= &#039;xxx&#039;, SOURCE_PASSWORD= &#039;xxx&#039;, SOURCE_LOG_FILE=&#039;xxx&#039;, MASTER_LOG_POS=&#039;xxx&#039;;<\/pre>\n<p>\u4e0a\u8ff0\u662f8.0.23\u4e2d\u7684\u8bed\u6cd5\u3002\u5982\u679cmysql\u662f8.0.23 \u4e4b\u524d\u7684\u7248\u672c\uff0c\u6267\u884c\u5982\u4e0bSQL\uff1a<\/p>\n<pre>CHANGE MASTER TO MASTER_HOST= &#039;xxx.xxx.xxx.xxx&#039;, MASTER_ USER=&#039;xxx&#039;, MASTER_PASSWORD=&#039;xxx&#039;, MASTER_LOG_FILE=&#039;xxx&#039;, MASTER_LOG_POS=&#039;xxx&#039;;<\/pre>\n<p>\u53c2\u6570\u542b\u4e49\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-005020-dt.png\" alt=\"20260305-005020-dt.png\" \/><\/p>\n<ol start=\"4\">\n<li>\u5f00\u542f\u540c\u6b65\u64cd\u4f5c<\/li>\n<\/ol>\n<pre>start replica; #8.0.22\u4e4b\u540e\nstart slave #8.0.22\u4e4b\u524d<\/pre>\n<ol start=\"5\">\n<li>\u67e5\u770b\u4e3b\u4ece\u540c\u6b65\u72b6\u6001<\/li>\n<\/ol>\n<pre>showreplica status\uff1b #8.0.22\u4e4b\u540e\nshow slave status; #8.0.22\u4e4b\u524d<\/pre>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-005624-XY.png\" alt=\"20260305-005624-XY.png\" \/><\/p>\n<ul>\n<li>\u5f53Replica_IO_Running\u548cReplica_SQL_Running\u90fd\u663e\u793aYes\u65f6\u624d\u8868\u793a\u914d\u7f6e\u6b63\u5e38\uff0c\u5426\u5219\u68c0\u67e5\u91cd\u65b0\u914d\u7f6e<\/li>\n<\/ul>\n<h3 id=\"h3-4\">\u6d4b\u8bd5<\/h3>\n<ol>\n<li>\u5728\u4e3b\u5e93\u4e0a\u521b\u5efa\u6570\u636e\u5e93\u3001\u8868\uff0c\u5e76\u63d2\u5165\u6570\u636e<\/li>\n<\/ol>\n<pre>create database db01;\nuse db01;\ncreate table tb_use(\n        id int(11) primary key not null auto_increment,\n        name varchar(50) not null,\n        sex varchar(1)\n)engine=innodb default charset=utf8mb4;\ninsert into tb_user(id, name, sex) valurs (null, &#039;Tom&#039;, &#039;1&#039;), (null, &#039;Trigger&#039;, &#039;0&#039;), (null, &#039;Dawn&#039;, &#039;1&#039;);<\/pre>\n<ol start=\"2\">\n<li>\u5728\u4ece\u5e93\u4e2d\u67e5\u8be2\u6570\u636e\uff0c\u9a8c\u8bc1\u4e3b\u4ece\u662f\u5426\u540c\u6b65<\/li>\n<\/ol>\n<h2 id=\"h2-5\">\u5206\u5e93\u5206\u8868<\/h2>\n<h3 id=\"h3-6\">1.\u4ecb\u7ecd<\/h3>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010026-1Z.png\" alt=\"20260305-010026-1Z.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010036-BI.png\" alt=\"20260305-010036-BI.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010047-L9.png\" alt=\"20260305-010047-L9.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-030333-bp.png\" alt=\"20260305-030333-bp.png\" \/><br \/>\n\u5b9e\u73b0\u6280\u672f\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010150-P7.png\" alt=\"20260305-010150-P7.png\" \/><\/p>\n<ol>\n<li>ShardingIDBC\uff1a \u57fa\u4e8eAOP\u539f\u7406\uff0c\u5728\u5e94\u7528\u7a0b\u5e8f\u4e2d\u5bf9\u672c\u5730\u6267\u884c\u7684SQL\u8fdb\u884c\u62e6\u622a\uff0c\u89e3\u6790\u3001\u6539\u5199\u3001\u8def\u7531\u5904\u7406\u3002\u9700\u8981\u81ea\u884c\u7f16\u7801\u914d\u7f6e\u5b9e\u73b0\uff0c\u53ea\u652f\u6301java\u8bed\u8a00\uff0c\u6027\u80fd\u8f83\u9ad8\u3002<\/li>\n<li>MyCat\uff1a\u6570\u636e\u5e93\u5206\u5e93\u5206\u8868\u4e2d\u95f4\u4ef6\uff0c\u4e0d\u7528\u8c03\u6574\u4ee3\u7801\u5373\u53ef\u5b9e\u73b0\u5206\u5e93\u5206\u8868\uff0c\u652f\u6301\u591a\u79cd\u8bed\u8a00\uff0c\u6027\u80fd\u4e0d\u53ca\u524d\u8005\u3002<\/li>\n<\/ol>\n<h3 id=\"h3-7\">2.Mycat\u6982\u8ff0<\/h3>\n<p>Mycat\u662f\u5f00\u6e90\u7684\u3001\u6d3b\u8dc3\u7684\u3001\u57fa\u4e8eJava\u8bed\u8a00\u7f16\u5199\u7684MySQL\u6570\u636e\u5e93\u4e2d\u95f4\u4ef6\u3002\u53ef\u4ee5\u50cf\u4f7f\u7528mysql\u4e00\u6837\u6765\u4f7f\u7528mycat\uff0c\u5bf9\u4e8e\u5f00\u53d1\u4eba\u5458\u6765\u8bf4\u6839\u672c\u611f\u89c9 \u4e0d\u5230mycat\u7684\u5b58\u5728\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010221-yB.png\" alt=\"20260305-010221-yB.png\" \/><\/p>\n<p>\u4f18\u52bf\uff1a<\/p>\n<ul>\n<li>\u6027\u80fd\u53ef\u9760\u7a33\u5b9a<\/li>\n<li>\u5f3a\u5927\u7684\u6280\u672f\u56e2\u961f<\/li>\n<li>\u4f53\u7cfb\u5b8c\u5584<\/li>\n<li>\u793e\u533a\u6d3b\u8dc3<\/li>\n<\/ul>\n<h4>Mycat\u5b89\u88c5<\/h4>\n<p>Mycat\u662f\u91c7\u7528java\u8bed\u8a00\u5f00\u53d1\u7684\u5f00\u6e90\u7684\u6570\u636e\u5e93\u4e2d\u95f4\u4ef6\uff0c\u652f\u6301Windows\u548cLinux\u8fd0\u884c\u73af\u5883\uff0c\u4e0b\u9762\u4ecb\u7ecdMyCat\u7684Linux\u4e2d\u7684\u73af\u5883\u642d\u5efa\u3002\u6211\u4eec\u9700\u8981\u5728 \u51c6\u5907\u597d\u7684\u670d\u52a1\u5668\u4e2d\u5b89\u88c5\u5982\u4e0b\u8f6f\u4ef6\uff1a<\/p>\n<ol>\n<li>MySQL<\/li>\n<li>JDK<\/li>\n<li>Mycat<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010328-A1.png\" alt=\"20260305-010328-A1.png\" \/><\/li>\n<\/ol>\n<p>\u5b89\u88c5\u6b65\u9aa4\uff1a\u4e0b\u8f7dMycat\u4e0a\u4f20\u5230\u670d\u52a1\u5668\uff0c\u89e3\u538b\u5373\u53ef<\/p>\n<p>\u76ee\u5f55\u7ed3\u6784<\/p>\n<ul>\n<li>bin : \u5b58\u653e\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u7528\u4e8e\u542f\u52a8\u505c\u6b62mycat<\/li>\n<li>conf\uff1a\u5b58\u653emycat\u7684\u914d\u7f6e\u6587\u4ef6<\/li>\n<li>lib\uff1a\u5b58\u653emycat\u7684\u9879\u76ee\u4f9d\u8d56\u5305\uff08jar\uff09<\/li>\n<li>logs\uff1a\u5b58\u653emycat\u7684\u65e5\u5fd7\u6587\u4ef6<\/li>\n<\/ul>\n<p>\u6982\u5ff5\u4ecb\u7ecd<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010712-Tb.png\" alt=\"20260305-010712-Tb.png\" \/><br \/>\n<strong>- Mycat\u672c\u8eab\u4e0d\u76f4\u63a5\u5b58\u50a8\u6570\u636e\uff0c\u53ea\u8d1f\u8d23\u7ba1\u7406\u6570\u636e\u8bf7\u6c42\u7684\u8def\u7531\u548c\u5206\u53d1\uff0c\u800c\u5b9e\u9645\u7684\u6570\u636e\u5b58\u50a8\u7531\u540e\u7aef\u6570\u636e\u5e93\u5b8c\u6210<\/strong><\/p>\n<h4>Mycat\u5165\u95e8<\/h4>\n<p>\u9700\u6c42<br \/>\n\u4ee5 tb_order \u8868\u4e3a\u4f8b\uff1a\u7531\u4e8e tb_order \u8868\u4e2d\u6570\u636e\u91cf\u5f88\u5927\uff0c\u78c1\u76d8IO\u53ca\u5bb9\u91cf\u90fd\u5230\u8fbe\u4e86\u74f6\u9888\uff0c\u73b0\u5728\u9700\u8981\u5bf9 tb_order \u8868\u8fdb\u884c\u6570\u636e\u5206\u7247\uff0c\u5206\u4e3a\u4e09\u4e2a\u6570\u636e\u8282\u70b9\uff0c\u6bcf\u4e00\u4e2a\u8282\u70b9\u4e3b\u673a\u4f4d\u4e8e\u4e0d\u540c\u7684\u670d\u52a1\u5668\u4e0a\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010800-j9.png\" alt=\"20260305-010800-j9.png\" \/><\/p>\n<p>\u73af\u5883\u51c6\u5907<\/p>\n<ol>\n<li>\u5173\u95ed\u4e09\u53f0\u670d\u52a1\u5668\u7684\u9632\u706b\u5899<\/li>\n<li>\u5206\u522b\u5728\u4e09\u53f0\u670d\u52a1\u5668\u91cc\u521b\u5efa\u6570\u636e\u5e93\uff08\u5206\u5e93\u3001\u5e93\u540d\u8981\u4e00\u81f4\uff09<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010821-AO.png\" alt=\"20260305-010821-AO.png\" \/><\/li>\n<\/ol>\n<p>\u5206\u7247\u914d\u7f6e<br \/>\nschema.xml<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010838-gY.png\" alt=\"20260305-010838-gY.png\" \/><br \/>\nserver.xml<br \/>\n\u914d\u7f6emycat\u7684\u7528\u6237\u53ca\u7528\u6237\u7684\u6743\u9650\u4fe1\u606f\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010905-eW.png\" alt=\"20260305-010905-eW.png\" \/><\/p>\n<p>\u542f\u52a8\u670d\u52a1<br \/>\n\u5207\u6362\u5230Mycat\u7684\u5b89\u88c5\u76ee\u5f55\uff0c\u6267\u884c\u5982\u4e0b\u6307\u4ee4\uff0c\u542f\u52a8Mycat\uff1a<\/p>\n<pre>## \u542f\u52a8\nbin\/mycat start\n## \u505c\u6b62\nbin\/mycat stop<\/pre>\n<p>Mycat\u542f\u52a8\u4e4b\u540e\uff0c\u5360\u7528\u7aef\u53e3\u53f7 8066<br \/>\n\u542f\u52a8\u5b8c\u6bd5\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770blogs\u76ee\u5f55\u4e0b\u7684\u542f\u52a8\u65e5\u5fd7\uff0c\u67e5\u770bMycat\u662f\u5426\u542f\u52a8\u5b8c\u6210<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-010947-SZ.png\" alt=\"20260305-010947-SZ.png\" \/><\/p>\n<p>\u5206\u7247\u6d4b\u8bd5<br \/>\n\u901a\u8fc7\u5982\u4e0b\u6307\u4ee4\uff0c\u5c31\u53ef\u4ee5\u8fde\u63a5\u5e76\u767b\u9646MyCat\uff1a<\/p>\n<pre>mysql -h 192.168.200.210 -P 8066 -uroot -p123456<\/pre>\n<p>\u7136\u540e\u5c31\u53ef\u4ee5\u5728MyCat\u4e2d\u6765\u521b\u5efa\u8868\uff0c\u5e76\u5f80\u8868\u7ed3\u6784\u4e2d\u63d2\u5165\u6570\u636e\uff0c\u67e5\u770b\u6570\u636e\u5728MySQL\u4e2d\u7684\u5206\u5e03\u60c5\u51b5<\/p>\n<pre>CREATE TABLE TB ORDER (\nid BIGINT(20) NOT NULL,\ntitle VARCHAR(100) NOT NULL,\nPRIMARY KEY (id)\nENGINE=INNODB DEFAULT CHARSET=utf8\nINSERT INTO TB ORDER(id,title) VALUES(1,&#039;goods1);\nINSERT INTO TB_ORDER(id,title) VALUES(2, goods2&#039;);\nINSERT INTO TB_ ORDER(id,title) VALUES(3,&#039;goods3);\nINSERT INTO TB_ ORDER(id,title) VALUES(1000000,&#039;goods1000000&quot;);\nINSERT INTO TB_ ORDER(id,title) VALUES(10000000,&#039;goods10000000&quot;);<\/pre>\n<p>\u4f1a\u53d1\u73b0goods3\u5728node1\u670d\u52a1\u5668\uff0cgoods1000000\u5728node2\u670d\u52a1\u5668\uff0cgoods10000000\u5728node3\u670d\u52a1\u5668<br \/>\n\u539f\u56e0\u662f\u5206\u7247\u89c4\u5219\u9ed8\u8ba4\u5982\u4e0b\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-011624-a0.png\" alt=\"20260305-011624-a0.png\" \/><\/p>\n<h3 id=\"h3-8\">3.Mycat\u914d\u7f6e<\/h3>\n<h4>3.1 schema.xml<\/h4>\n<p>schema.xml \u4f5c\u4e3aMyCat\u4e2d\u6700\u91cd\u8981\u7684\u914d\u7f6e\u6587\u4ef6\u4e4b\u4e00 , \u6db5\u76d6\u4e86MyCat\u7684\u903b\u8f91\u5e93\u3001\u903b\u8f91\u8868\u3001\u5206\u7247\u89c4\u5219\u3001\u5206\u7247\u8282\u70b9\u53ca\u6570\u636e\u6e90\u7684\u914d\u7f6e<br \/>\n\u4e3b\u8981\u5305\u542b\u4ee5\u4e0b\u4e09\u7ec4\u6807\u7b7e\uff1a<\/p>\n<ul>\n<li>schema\u6807\u7b7e<\/li>\n<li>datanode\u6807\u7b7e<\/li>\n<li>datahost\u6807\u7b7e<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-012109-k9.png\" alt=\"20260305-012109-k9.png\" \/><\/li>\n<\/ul>\n<p>schema\u6807\u7b7e<br \/>\nschema \u6807\u7b7e\u7528\u4e8e\u5b9a\u4e49 MyCat\u5b9e\u4f8b\u4e2d\u7684\u903b\u8f91\u5e93 , \u4e00\u4e2aMyCat\u5b9e\u4f8b\u4e2d, \u53ef\u4ee5\u6709\u591a\u4e2a\u903b\u8f91\u5e93 , \u53ef\u4ee5\u901a\u8fc7 schema \u6807\u7b7e\u6765\u5212\u5206\u4e0d\u540c\u7684\u903b\u8f91\u5e93\u3002MyCat\u4e2d\u7684\u903b\u8f91\u5e93\u7684\u6982\u5ff5\uff0c\u7b49\u540c\u4e8eMySQL\u4e2d\u7684database\u6982\u5ff5 , \u9700\u8981\u64cd\u4f5c\u67d0\u4e2a\u903b\u8f91\u5e93\u4e0b\u7684\u8868\u65f6, \u4e5f\u9700\u8981\u5207\u6362\u903b\u8f91\u5e93(use xxx)\u3002<br \/>\n\u6838\u5fc3\u5c5e\u6027\uff1a<\/p>\n<ul>\n<li>name\uff1a\u6307\u5b9a\u81ea\u5b9a\u4e49\u7684\u903b\u8f91\u5e93\u5e93\u540d<\/li>\n<li>checkSQLschema\uff1a\u5728SQL\u8bed\u53e5\u64cd\u4f5c\u65f6\u6307\u5b9a\u4e86\u6570\u636e\u5e93\u540d\u79f0\uff0c\u6267\u884c\u65f6\u662f\u5426\u81ea\u52a8\u53bb\u9664\uff1btrue\uff1a\u81ea\u52a8\u53bb\u9664\uff0cfalse\uff1a\u4e0d\u81ea\u52a8\u53bb\u9664<\/li>\n<li>sqlMaxLimit\uff1a\u5982\u679c\u672a\u6307\u5b9alimit\u8fdb\u884c\u67e5\u8be2\uff0c\u5217\u8868\u67e5\u8be2\u6a21\u5f0f\u67e5\u8be2\u591a\u5c11\u6761\u8bb0\u5f55<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-012157-YF.png\" alt=\"20260305-012157-YF.png\" \/><\/li>\n<\/ul>\n<p>table \u6807\u7b7e\u5b9a\u4e49\u4e86MyCat\u4e2d\u903b\u8f91\u5e93schema\u4e0b\u7684\u903b\u8f91\u8868 , \u6240\u6709\u9700\u8981\u62c6\u5206\u7684\u8868\u90fd\u9700\u8981\u5728table\u6807\u7b7e\u4e2d\u5b9a\u4e49 \u3002<br \/>\n\u6838\u5fc3\u5c5e\u6027\uff1a<\/p>\n<ul>\n<li>name\uff1a\u5b9a\u4e49\u903b\u8f91\u8868\u8868\u540d\uff0c\u5728\u8be5\u903b\u8f91\u5e93\u4e0b\u552f\u4e00<\/li>\n<li>dataNode\uff1a\u5b9a\u4e49\u903b\u8f91\u8868\u6240\u5c5e\u7684dataNode\uff0c\u8be5\u5c5e\u6027\u9700\u8981\u4e0edataNode\u6807\u7b7e\u4e2dname\u5bf9\u5e94\uff1b\u591a\u4e2adataNode\u9017\u53f7\u5206\u9694<\/li>\n<li>rule\uff1a\u5206\u7247\u89c4\u5219\u7684\u540d\u5b57\uff0c\u5206\u7247\u89c4\u5219\u540d\u5b57\u662f\u5728rule.xml\u4e2d\u5b9a\u4e49\u7684<\/li>\n<li>primaryKey\uff1a\u903b\u8f91\u8868\u5bf9\u5e94\u771f\u5b9e\u8868\u7684\u4e3b\u952e<\/li>\n<li>type\uff1a\u903b\u8f91\u8868\u7684\u7c7b\u578b\uff0c\u76ee\u524d\u903b\u8f91\u8868\u53ea\u6709\u5168\u5c40\u8868\u548c\u666e\u901a\u8868\uff0c\u5982\u679c\u672a\u914d\u7f6e\uff0c\u5c31\u662f\u666e\u901a\u8868\uff1b\u5168\u5c40\u8868\uff0c\u914d\u7f6e\u4e3a global<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-012220-yI.png\" alt=\"20260305-012220-yI.png\" \/><\/li>\n<\/ul>\n<p>dataNode\u6807\u7b7e<br \/>\ndataNode\u6807\u7b7e\u4e2d\u5b9a\u4e49\u4e86MyCat\u4e2d\u7684\u6570\u636e\u8282\u70b9, \u4e5f\u5c31\u662f\u6211\u4eec\u901a\u5e38\u8bf4\u7684\u6570\u636e\u5206\u7247\u3002\u4e00\u4e2adataNode\u6807\u7b7e\u5c31\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u6570\u636e\u5206\u7247\u3002<br \/>\n\u6838\u5fc3\u5c5e\u6027\uff1a<\/p>\n<ul>\n<li>name\uff1a\u5b9a\u4e49\u6570\u636e\u8282\u70b9\u540d<\/li>\n<li>dataHost\uff1a\u6570\u636e\u5e93\u5b9e\u4f8b\u4e3b\u673a\u540d\u79f0\uff0c\u5f15\u7528\u81ea dataHost \u6807\u7b7e\u4e2dname\u5c5e\u6027<\/li>\n<li>database\uff1a\u5b9a\u4e49\u5206\u7247\u6240\u5c5e\u6570\u636e\u5e93<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-012257-ZA.png\" alt=\"20260305-012257-ZA.png\" \/><\/li>\n<\/ul>\n<p>dataHost\u6807\u7b7e<br \/>\n\u8be5\u6807\u7b7e\u5728MyCat\u903b\u8f91\u5e93\u4e2d\u4f5c\u4e3a\u5e95\u5c42\u6807\u7b7e\u5b58\u5728, \u76f4\u63a5\u5b9a\u4e49\u4e86\u5177\u4f53\u7684\u6570\u636e\u5e93\u5b9e\u4f8b\u3001\u8bfb\u5199\u5206\u79bb\u3001\u5fc3\u8df3\u8bed\u53e5\u3002<br \/>\n\u6838\u5fc3\u5c5e\u6027\uff1a<\/p>\n<ul>\n<li>name\uff1a\u552f\u4e00\u6807\u8bc6\uff0c\u4f9b\u4e0a\u5c42\u6807\u7b7e\u4f7f\u7528<\/li>\n<li>maxCon\/minCon\uff1a\u6700\u5927\u8fde\u63a5\u6570\/\u6700\u5c0f\u8fde\u63a5\u6570<\/li>\n<li>balance\uff1a\u8d1f\u8f7d\u5747\u8861\u7b56\u7565\uff0c\u53d6\u503c 0,1,2,3<\/li>\n<li>writeType\uff1a\u5199\u64cd\u4f5c\u5206\u53d1\u65b9\u5f0f\uff080\uff1a\u5199\u64cd\u4f5c\u8f6c\u53d1\u5230\u7b2c\u4e00\u4e2awriteHost\uff0c\u7b2c\u4e00\u4e2a\u6302\u4e86\uff0c\u5207\u6362\u5230\u7b2c\u4e8c\u4e2a\uff1b1\uff1a\u5199\u64cd\u4f5c\u968f\u673a\u5206\u53d1\u5230\u914d\u7f6e\u7684writeHost\uff09<\/li>\n<li>dbDriver\uff1a\u6570\u636e\u5e93\u9a71\u52a8\uff0c\u652f\u6301 native\u3001jdbc<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-012320-nJ.png\" alt=\"20260305-012320-nJ.png\" \/><\/li>\n<\/ul>\n<h4>3.2 rule.xml<\/h4>\n<p>rule.xml\u4e2d\u5b9a\u4e49\u6240\u6709\u62c6\u5206\u8868\u7684\u89c4\u5219, \u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u53ef\u4ee5\u7075\u6d3b\u7684\u4f7f\u7528\u5206\u7247\u7b97\u6cd5, \u6216\u8005\u5bf9\u540c\u4e00\u4e2a\u5206\u7247\u7b97\u6cd5\u4f7f\u7528\u4e0d\u540c\u7684\u53c2\u6570, \u5b83\u8ba9\u5206\u7247\u8fc7\u7a0b\u53ef\u914d \u7f6e\u5316\u3002<br \/>\n\u4e3b\u8981\u5305\u542b\u4e24\u7c7b\u6807\u7b7e\uff1a<\/p>\n<ul>\n<li>tableRule<\/li>\n<li>Function<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-012443-cX.png\" alt=\"20260305-012443-cX.png\" \/><\/li>\n<\/ul>\n<h4>3.3 server.xml<\/h4>\n<p>server.xml\u914d\u7f6e\u6587\u4ef6\u5305\u542b\u4e86MyCat\u7684\u7cfb\u7edf\u914d\u7f6e\u4fe1\u606f\u3002<br \/>\n\u4e3b\u8981\u6709\u4e24\u4e2a\u91cd\u8981\u7684\u6807\u7b7e\uff1a<\/p>\n<ul>\n<li>system<\/li>\n<li>user<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-013455-aE.png\" alt=\"20260305-013455-aE.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-013502-Ui.png\" alt=\"20260305-013502-Ui.png\" \/><\/li>\n<\/ul>\n<p>system\u6807\u7b7e<br \/>\n\u5bf9\u5e94\u7684\u7cfb\u7edf\u914d\u7f6e\u9879\u53ca\u5176\u542b\u4e49\uff0c\u53c2\u8003server\u7cfb\u7edf\u914d\u7f6e\u4fe1\u606f\u542b\u4e49\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th>\u5c5e\u6027<\/th>\n<th>\u53d6\u503c<\/th>\n<th>\u542b\u4e49<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>charset<\/td>\n<td>utf8<\/td>\n<td>\u8bbe\u7f6e Mycat \u7684\u5b57\u7b26\u96c6\uff0c\u5b57\u7b26\u96c6\u9700\u8981\u4e0e MySQL \u7684\u5b57\u7b26\u96c6\u4fdd\u6301\u4e00\u81f4<\/td>\n<\/tr>\n<tr>\n<td>nonePasswordLogin<\/td>\n<td>0,1<\/td>\n<td>0 \u4e3a\u9700\u8981\u5bc6\u7801\u767b\u5f55\uff0c1 \u4e3a\u4e0d\u9700\u8981\u5bc6\u7801\u767b\u5f55\uff0c\u9ed8\u8ba4\u4e3a 0\uff1b\u8bbe\u7f6e\u4e3a 1 \u65f6\u9700\u8981\u6307\u5b9a\u9ed8\u8ba4\u8d26\u6237<\/td>\n<\/tr>\n<tr>\n<td>useHandshakeV10<\/td>\n<td>0,1<\/td>\n<td>\u662f\u5426\u91c7\u7528 HandshakeV10Packet \u4e0e client \u901a\u4fe1\uff1b1\uff1a\u662f\uff0c0\uff1a\u5426\u3002\u7528\u4e8e\u517c\u5bb9\u9ad8\u7248\u672c JDBC \u9a71\u52a8<\/td>\n<\/tr>\n<tr>\n<td>useSqlStat<\/td>\n<td>0,1<\/td>\n<td>\u662f\u5426\u5f00\u542f SQL \u5b9e\u65f6\u7edf\u8ba1\uff1b1 \u4e3a\u5f00\u542f\uff0c0 \u4e3a\u5173\u95ed\u3002\u5f00\u542f\u540e\u53ef\u901a\u8fc7 9066 \u7aef\u53e3\u67e5\u770b SQL \u6267\u884c\u60c5\u51b5\uff08show @@sql \u7b49\uff09<\/td>\n<\/tr>\n<tr>\n<td>useGlobleTableCheck<\/td>\n<td>0,1<\/td>\n<td>\u662f\u5426\u5f00\u542f\u5168\u5c40\u8868\u4e00\u81f4\u6027\u68c0\u6d4b\uff1b1 \u4e3a\u5f00\u542f\uff0c0 \u4e3a\u5173\u95ed<\/td>\n<\/tr>\n<tr>\n<td>sqlExecuteTimeout<\/td>\n<td>1000 \/ 300<\/td>\n<td>SQL \u8bed\u53e5\u6267\u884c\u8d85\u65f6\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\uff1b\u8d85\u65f6\u5c06\u5173\u95ed\u8fde\u63a5<\/td>\n<\/tr>\n<tr>\n<td>sequnceHandlerType<\/td>\n<td>0,1,2<\/td>\n<td>\u6307\u5b9a Mycat \u5168\u5c40\u5e8f\u5217\u7c7b\u578b\uff1a0 \u672c\u5730\u6587\u4ef6\uff08\u9ed8\u8ba4\uff0c\u9002\u5408\u6d4b\u8bd5\uff09\uff0c1 \u6570\u636e\u5e93\u65b9\u5f0f\uff0c2 \u65f6\u95f4\u6233\u5217\u65b9\u5f0f<\/td>\n<\/tr>\n<tr>\n<td>sequnceHandlerPattern<\/td>\n<td>\u6b63\u5219\u8868\u8fbe\u5f0f<\/td>\n<td>\u5fc5\u987b\u5305\u542b MYCATSEQ \u6216 mycatseq \u624d\u4f1a\u8fdb\u5165\u5e8f\u5217\u5339\u914d\u6d41\u7a0b\uff08\u6ce8\u610f MYCATSEQ_ \u540e\u6709\u7a7a\u683c\u60c5\u51b5\uff09<\/td>\n<\/tr>\n<tr>\n<td>subqueryRelationshipCheck<\/td>\n<td>true,false<\/td>\n<td>\u5b50\u67e5\u8be2\u5b58\u5728\u5173\u8054\u67e5\u8be2\u65f6\uff0c\u68c0\u67e5\u5173\u8054\u5b57\u6bb5\u662f\u5426\u5305\u542b\u5206\u7247\u5b57\u6bb5\uff1b\u9ed8\u8ba4 false<\/td>\n<\/tr>\n<tr>\n<td>useCompression<\/td>\n<td>0,1<\/td>\n<td>\u662f\u5426\u5f00\u542f MySQL \u538b\u7f29\u534f\u8bae\uff1b0 \u5173\u95ed\uff0c1 \u5f00\u542f<\/td>\n<\/tr>\n<tr>\n<td>fakeMySQLVersion<\/td>\n<td>5.5,5.6<\/td>\n<td>\u8bbe\u7f6e\u6a21\u62df\u7684 MySQL \u7248\u672c\u53f7<\/td>\n<\/tr>\n<tr>\n<td>defaultSqlParser<\/td>\n<td>druidparser \/ fdbparser<\/td>\n<td>\u6307\u5b9a\u9ed8\u8ba4 SQL \u89e3\u6790\u5668\uff1b1.4 \u4e4b\u540e\u9ed8\u8ba4 druidparser\uff0cfdbparser \u5df2\u5e9f\u5f03<\/td>\n<\/tr>\n<tr>\n<td>processors<\/td>\n<td>1,2...<\/td>\n<td>\u6307\u5b9a\u7cfb\u7edf\u53ef\u7528\u7ebf\u7a0b\u6570\u91cf\uff1b\u9ed8\u8ba4 CPU \u6838\u5fc3\u6570 \u00d7 \u6bcf\u6838\u5fc3\u7ebf\u7a0b\u6570\uff1b\u4f1a\u5f71\u54cd bufferPool \u7b49\u53c2\u6570<\/td>\n<\/tr>\n<tr>\n<td>processorBufferChunk<\/td>\n<td>\u6570\u503c<\/td>\n<td>\u6bcf\u6b21\u5206\u914d Socket Direct Buffer \u7684\u5927\u5c0f\uff0c\u9ed8\u8ba4 4096 \u5b57\u8282<\/td>\n<\/tr>\n<tr>\n<td>processorExecutor<\/td>\n<td>\u6570\u503c<\/td>\n<td>\u6307\u5b9a NIOProcessor \u4e0a\u5171\u4eab businessExecutor \u7ebf\u7a0b\u6c60\u5927\u5c0f<\/td>\n<\/tr>\n<tr>\n<td>packetHeaderSize<\/td>\n<td>\u6570\u503c<\/td>\n<td>MySQL \u534f\u8bae\u62a5\u6587\u5934\u957f\u5ea6\uff0c\u9ed8\u8ba4 4 \u5b57\u8282<\/td>\n<\/tr>\n<tr>\n<td>maxPacketSize<\/td>\n<td>\u6570\u503c<\/td>\n<td>MySQL \u534f\u8bae\u53ef\u643a\u5e26\u6570\u636e\u6700\u5927\u5927\u5c0f\uff0c\u9ed8\u8ba4 16M<\/td>\n<\/tr>\n<tr>\n<td>idleTimeout<\/td>\n<td>30<\/td>\n<td>\u8fde\u63a5\u7a7a\u95f2\u8d85\u65f6\u65f6\u95f4\uff0c\u9ed8\u8ba4 30 \u5206\u949f<\/td>\n<\/tr>\n<tr>\n<td>txIsolation<\/td>\n<td>1,2,3,4<\/td>\n<td>\u4e8b\u52a1\u9694\u79bb\u7ea7\u522b\uff1a1=READ_UNCOMMITTED\uff1b2=READ_COMMITTED\uff1b3=REPEATED_READ\uff08\u9ed8\u8ba4\uff09\uff1b4=SERIALIZABLE<\/td>\n<\/tr>\n<tr>\n<td>serverPort<\/td>\n<td>8066<\/td>\n<td>\u5b9a\u4e49 Mycat \u4f7f\u7528\u7aef\u53e3\uff0c\u9ed8\u8ba4 8066<\/td>\n<\/tr>\n<tr>\n<td>managerPort<\/td>\n<td>9066<\/td>\n<td>\u5b9a\u4e49 Mycat \u7ba1\u7406\u7aef\u53e3\uff0c\u9ed8\u8ba4 9066<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"h2-9\">Mycat\u5206\u7247<\/h2>\n<h3 id=\"h3-10\">\u5782\u76f4\u62c6\u5206<\/h3>\n<p>\u5728\u4e1a\u52a1\u7cfb\u7edf\u4e2d, \u6d89\u53ca\u4ee5\u4e0b\u8868\u7ed3\u6784 ,\u4f46\u662f\u7531\u4e8e\u7528\u6237\u4e0e\u8ba2\u5355\u6bcf\u5929\u90fd\u4f1a\u4ea7\u751f\u5927\u91cf\u7684\u6570\u636e, \u5355\u53f0\u670d\u52a1\u5668\u7684\u6570\u636e\u5b58\u50a8\u53ca\u5904\u7406\u80fd\u529b\u662f\u6709\u9650\u7684, \u53ef\u4ee5\u5bf9\u6570\u636e \u5e93\u8868\u8fdb\u884c\u62c6\u5206, \u539f\u6709\u7684\u6570\u636e\u5e93\u8868\u5982\u4e0b\uff1a<\/p>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144502-rR.png\" alt=\"20260305-144502-rR.png\" \/><\/p>\n<h4>\u51c6\u5907<\/h4>\n<p>\u5206\u522b\u5728\u4e09\u53f0MySQL\u4e2d\u521b\u5efa\u6570\u636e\u5e93 shopping\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144552-RD.png\" alt=\"20260305-144552-RD.png\" \/><\/p>\n<h4>\u914d\u7f6e<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144607-7t.png\" alt=\"20260305-144607-7t.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144621-Pr.png\" alt=\"20260305-144621-Pr.png\" \/><\/p>\n<h4>\u6d4b\u8bd5<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144714-YK.png\" alt=\"20260305-144714-YK.png\" \/><br \/>\n\u5168\u5c40\u8868\u914d\u7f6e\uff1a\u5bf9\u4e8e\u7b2c\u4e8c\u4e2a\u67e5\u8be2\u8bed\u53e5\uff0c\u7701\u3001\u5e02\u3001\u533a\/\u53bf\u8868tb_areas_provinces , tb_areas_city , tb_areas_region\uff0c\u662f\u5c5e\u4e8e\u6570\u636e\u5b57\u5178\u8868\uff0c\u53ea\u80fd\u5728\u672c\u5b50\u6570\u636e\u5e93\u4e2d\u53ef\u4ee5\u4f7f\u7528\uff0c\u4f46\u662f\u5728\u591a\u4e2a\u4e1a\u52a1\u6a21\u5757\u4e2d\u90fd\u53ef\u80fd\u4f1a\u9047\u5230\uff0c\u53ef\u4ee5\u5c06\u5176\u8bbe\u7f6e\u4e3a\u5168\u5c40\u8868\uff0c\u5229\u4e8e\u4e1a\u52a1\u64cd\u4f5c\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144736-9b.png\" alt=\"20260305-144736-9b.png\" \/><\/p>\n<h3 id=\"h3-11\">\u6c34\u5e73\u62c6\u5206<\/h3>\n<p>\u5728\u4e1a\u52a1\u7cfb\u7edf\u4e2d, \u6709\u4e00\u5f20\u8868(\u65e5\u5fd7\u8868), \u4e1a\u52a1\u7cfb\u7edf\u6bcf\u5929\u90fd\u4f1a\u4ea7\u751f\u5927\u91cf\u7684\u65e5\u5fd7\u6570\u636e , \u5355\u53f0\u670d\u52a1\u5668\u7684\u6570\u636e\u5b58\u50a8\u53ca\u5904\u7406\u80fd\u529b\u662f\u6709\u9650\u7684, \u53ef\u4ee5\u5bf9\u6570\u636e\u5e93\u8868 \u8fdb\u884c\u62c6\u5206\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144809-5J.png\" alt=\"20260305-144809-5J.png\" \/><\/p>\n<h4>\u51c6\u5907<\/h4>\n<p>\u5206\u522b\u5728\u4e09\u53f0MySQL\u4e2d\u521b\u5efa\u6570\u636e\u5e93 itcast\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144827-52.png\" alt=\"20260305-144827-52.png\" \/><\/p>\n<h4>\u914d\u7f6e<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144843-1U.png\" alt=\"20260305-144843-1U.png\" \/><\/p>\n<h4>\u6d4b\u8bd5<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144902-i7.png\" alt=\"20260305-144902-i7.png\" \/><\/p>\n<ul>\n<li>\u5728Mycat\u4e2d\u521b\u5efa\u8868\u3001\u63d2\u5165\u6570\u636e\u540e\u5206\u8868\u4f1a\u81ea\u52a8\u521b\u5efa\u548c\u63d2\u5165\u76f8\u5e94\u7684\u6570\u636e\uff0c\u4e0d\u9700\u8981\u50cf\u5782\u76f4\u5206\u8868\u90a3\u6837\u624b\u52a8\u521b\u5efa\u8868<\/li>\n<\/ul>\n<h3 id=\"h3-12\">\u5206\u7247\u89c4\u5219<\/h3>\n<h4>1.\u5206\u7247\u89c4\u5219-\u8303\u56f4<\/h4>\n<p>\u6839\u636e\u6307\u5b9a\u7684\u5b57\u6bb5\u53ca\u5176\u914d\u7f6e\u7684\u8303\u56f4\u4e0e\u6570\u636e\u8282\u70b9\u7684\u5bf9\u5e94\u60c5\u51b5\uff0c \u6765\u51b3\u5b9a\u8be5\u6570\u636e\u5c5e\u4e8e\u54ea\u4e00\u4e2a\u5206\u7247\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-144953-Gx.png\" alt=\"20260305-144953-Gx.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145004-Mv.png\" alt=\"20260305-145004-Mv.png\" \/><\/p>\n<h4>2.\u5206\u7247\u89c4\u5219-\u53d6\u6a21<\/h4>\n<p>\u6839\u636e\u6307\u5b9a\u7684\u5b57\u6bb5\u503c\u4e0e\u8282\u70b9\u6570\u91cf\u8fdb\u884c\u6c42\u6a21\u8fd0\u7b97\uff0c\u6839\u636e\u8fd0\u7b97\u7ed3\u679c\uff0c \u6765\u51b3\u5b9a\u8be5\u6570\u636e\u5c5e\u4e8e\u54ea\u4e00\u4e2a\u5206\u7247\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145027-XK.png\" alt=\"20260305-145027-XK.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145035-Bh.png\" alt=\"20260305-145035-Bh.png\" \/><\/p>\n<ul>\n<li>\u8303\u56f4\u5206\u7247\u548c\u53d6\u6a21\u5206\u7247\u53ea\u9002\u7528\u4e8e\u6570\u5b57\uff0c\u5176\u4ed6\u5982\u5b57\u7b26\u4e32\u5c31\u4e0d\u9002\u7528\u4e86<\/li>\n<\/ul>\n<h4>3.\u5206\u7247\u89c4\u5219-\u4e00\u81f4\u6027hash<\/h4>\n<p>\u6240\u8c13\u4e00\u81f4\u6027\u54c8\u5e0c\uff0c \u76f8\u540c\u7684\u54c8\u5e0c\u56e0\u5b50\u8ba1\u7b97\u503c\u603b\u662f\u88ab\u5212\u5206\u5230\u76f8\u540c\u7684\u5206\u533a\u8868\u4e2d\uff0c\u4e0d\u4f1a\u56e0\u4e3a\u5206\u533a\u8282\u70b9\u7684\u589e\u52a0\u800c\u6539\u53d8\u539f\u6765\u6570\u636e\u7684\u5206\u533a\u4f4d\u7f6e\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145106-Ie.png\" alt=\"20260305-145106-Ie.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145113-Ry.png\" alt=\"20260305-145113-Ry.png\" \/><\/p>\n<h4>4.\u5206\u7247\u89c4\u5219-\u679a\u4e3e<\/h4>\n<p>\u901a\u8fc7\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u914d\u7f6e\u53ef\u80fd\u7684\u679a\u4e3e\u503c, \u6307\u5b9a\u6570\u636e\u5206\u5e03\u5230\u4e0d\u540c\u6570\u636e\u8282\u70b9\u4e0a, \u672c\u89c4\u5219\u9002\u7528\u4e8e\u6309\u7167\u8eab\u4efd\u3001\u6027\u522b\u3001\u72b6\u6001\u62c6\u5206\u6570\u636e\u7b49\u4e1a\u52a1 \u3002<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145148-iK.png\" alt=\"20260305-145148-iK.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145155-0Y.png\" alt=\"20260305-145155-0Y.png\" \/><\/p>\n<h4>5.\u5206\u7247\u89c4\u5219-\u5e94\u7528\u6307\u5b9a<\/h4>\n<p>\u8fd0\u884c\u9636\u6bb5\u7531\u5e94\u7528\u81ea\u4e3b\u51b3\u5b9a\u8def\u7531\u5230\u90a3\u4e2a\u5206\u7247 , \u76f4\u63a5\u6839\u636e\u5b57\u7b26\u5b50\u4e32\uff08\u5fc5\u987b\u662f\u6570\u5b57\uff09\u8ba1\u7b97\u5206\u7247\u53f7\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145215-7l.png\" alt=\"20260305-145215-7l.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145224-rR.png\" alt=\"20260305-145224-rR.png\" \/><\/p>\n<h4>6.\u5206\u7247\u89c4\u5219-\u56fa\u5b9a\u5206\u7247hash\u7b97\u6cd5<\/h4>\n<p>\u8be5\u7b97\u6cd5\u7c7b\u4f3c\u4e8e\u5341\u8fdb\u5236\u7684\u6c42\u6a21\u8fd0\u7b97\uff0c\u4f46\u662f\u4e3a\u4e8c\u8fdb\u5236\u7684\u64cd\u4f5c\uff0c\u4f8b\u5982\uff0c\u53d6 id \u7684\u4e8c\u8fdb\u5236\u4f4e 10 \u4f4d \u4e0e 1111111111 \u8fdb\u884c\u4f4d &amp; \u8fd0\u7b97\u3002<\/p>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145246-VR.png\" alt=\"20260305-145246-VR.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145253-ro.png\" alt=\"20260305-145253-ro.png\" \/><\/p>\n<h4>7.\u5206\u7247\u89c4\u5219-\u5b57\u7b26\u4e32hash\u89e3\u6790<\/h4>\n<p>\u622a\u53d6\u5b57\u7b26\u4e32\u4e2d\u7684\u6307\u5b9a\u4f4d\u7f6e\u7684\u5b50\u5b57\u7b26\u4e32, \u8fdb\u884chash\u7b97\u6cd5\uff0c \u7b97\u51fa\u5206\u7247\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145318-NA.png\" alt=\"20260305-145318-NA.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145325-dR.png\" alt=\"20260305-145325-dR.png\" \/><\/p>\n<h4>8.\u5206\u7247\u89c4\u5219-\u6309\uff08\u5929\uff09\u65e5\u671f\u5206\u7247<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145348-Ao.png\" alt=\"20260305-145348-Ao.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145358-Ao.png\" alt=\"20260305-145358-Ao.png\" \/><\/p>\n<h4>9.\u5206\u7247\u89c4\u5219-\u81ea\u7136\u6708<\/h4>\n<p>\u4f7f\u7528\u573a\u666f\u4e3a\u6309\u7167\u6708\u4efd\u6765\u5206\u7247, \u6bcf\u4e2a\u81ea\u7136\u6708\u4e3a\u4e00\u4e2a\u5206\u7247\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145417-TO.png\" alt=\"20260305-145417-TO.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145424-jd.png\" alt=\"20260305-145424-jd.png\" \/><\/p>\n<h2 id=\"h2-13\">Mycat\u7ba1\u7406\u53ca\u76d1\u63a7<\/h2>\n<h3 id=\"h3-14\">1.Mycat\u539f\u7406<\/h3>\n<p>Mycat\u4ece\u5ba2\u6237\u7aef\u63a5\u6536\u5230\u4fe1\u606f\u540e\uff0c\u4f1a\u5148\u8fdb\u884cSQL\u8bed\u53e5\u89e3\u6790\uff0c\u8fdb\u884c\u5206\u7247\u5206\u6790\u548c\u8def\u7531\u5206\u6790\uff0c\u6839\u636e\u5206\u7247\u89c4\u5219\u5c06 SQL \u8def\u7531\u5230\u76f8\u5e94\u7684\u6570\u636e\u5e93\u8282\u70b9\uff0cMycat \u652f\u6301\u8bfb\u5199\u5206\u79bb\uff0c\u5c06\u5199\u64cd\u4f5c\u53d1\u5f80\u4e3b\u5e93\uff0c\u8bfb\u64cd\u4f5c\u53d1\u5f80\u4ece\u5e93\uff0c\u670d\u52a1\u5668\u5904\u7406\u8fd0\u884cMycat\u8def\u7531\u8fc7\u6765\u7684SQL\u540e\uff0c\u5c06\u8fd0\u884c\u7ed3\u679c\u8fd4\u56de\u7ed9Mycat\uff0cMycat\u4ece\u5404\u8282\u70b9\u83b7\u53d6\u6570\u636e\u540e\uff0c\u5728\u4e2d\u95f4\u4ef6\u5c42\u8fdb\u884c\u7ed3\u679c\u5408\u5e76\u548c\u805a\u5408\u5904\u7406\uff0c\u5982\u679cSQL\u8bed\u53e5\u6709\u6392\u5e8f\u64cd\u4f5c\u548c\u5206\u9875\u64cd\u4f5c\uff0c\u4f1a\u5bf9\u805a\u5408\u540e\u7684\u6570\u636e\u8fdb\u884c\u6392\u5e8f\u5904\u7406\u548c\u5206\u9875\u5904\u7406\uff0c\u6700\u540e\u628a\u6700\u7ec8\u7ed3\u679c\u8fd4\u56de\u7ed9\u5ba2\u6237\u7aef\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145503-jo.png\" alt=\"20260305-145503-jo.png\" \/><\/p>\n<h3 id=\"h3-15\">2.Mycat\u7ba1\u7406<\/h3>\n<p>Mycat\u9ed8\u8ba4\u5f00\u901a2\u4e2a\u7aef\u53e3\uff0c\u53ef\u4ee5\u5728server.xml\u4e2d\u8fdb\u884c\u4fee\u6539\uff1a<\/p>\n<ul>\n<li>8066 \u6570\u636e\u8bbf\u95ee\u7aef\u53e3\uff0c\u5373\u8fdb\u884c DML \u548c DDL \u64cd\u4f5c<\/li>\n<li>9066 \u6570\u636e\u5e93\u7ba1\u7406\u7aef\u53e3\uff0c\u5373 mycat \u670d\u52a1\u7ba1\u7406\u63a7\u5236\u529f\u80fd\uff0c\u7528\u4e8e\u7ba1\u7406mycat\u7684\u6574\u4e2a\u96c6\u7fa4\u72b6\u6001<\/li>\n<\/ul>\n<pre>mysql -h 192.168.200.210 -P 9066 -uroot -p123456<\/pre>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-145609-Cr.png\" alt=\"20260305-145609-Cr.png\" \/><\/p>\n<h3 id=\"h3-16\">3.Mycat-eye<\/h3>\n<p>Mycat-web\uff08Mycat-eye\uff09\u662f\u5bf9mycat-server\u63d0\u4f9b\u76d1\u63a7\u670d\u52a1\uff0c\u529f\u80fd\u4e0d\u5c40\u9650\u4e8e\u5bf9mycat-server\u4f7f\u7528\u3002\u4ed6\u901a\u8fc7JDBC\u8fde\u63a5\u5bf9Mycat\u3001Mysql\u76d1\u63a7\uff0c\u76d1\u63a7\u8fdc\u7a0b\u670d\u52a1\u5668\uff08\u76ee\u524d\u4ec5\u9650\u4e8elinux\u7cfb\u7edf\uff09\u7684cpu\u3001\u5185\u5b58\u3001\u7f51\u7edc\u3001\u78c1\u76d8\u3002<br \/>\nMycat-eye\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u9700\u8981\u4f9d\u8d56zookeeper\uff0c\u56e0\u6b64\u9700\u8981\u5148\u5b89\u88c5zookeeper\u3002<\/p>\n<p>\u5b89\u88c5\uff1aZookeeper\u5b89\u88c5\u548cMyCat-web\u5b89\u88c5<\/p>\n<p>\u5b89\u88c5Zookeeper<\/p>\n<pre>A. \u4e0a\u4f20\u5b89\u88c5\u5305 zookeeper-3.4.6.tar.gz\n\nB. \u89e3\u538b\ntar -zxvf zookeeper-3.4.6.tar.gz -C \/usr\/local\/\n\nC. \u521b\u5efa\u6570\u636e\u5b58\u653e\u76ee\u5f55\ncd \/usr\/local\/zookeeper-3.4.6\/\nmkdir data\n\nD. \u4fee\u6539\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\u5e76\u914d\u7f6e\ncd config\nmv zoo_sample.cfg zoo.cfg\n\nE. \u914d\u7f6e\u6570\u636e\u5b58\u653e\u5f55\ndataDir=\/usr\/local\/zookeeper-3.4.6\/data\n\nF. \u542f\u52a8Zookeeper\nbin\/zkServer.sh start\nbin\/zkServer.sh status<\/pre>\n<p>\u5b89\u88c5MyCat-web<\/p>\n<pre>A. \u4e0a\u4f20\u5b89\u88c5\u5305Mycat-web.tar.gz\n\nB. \u89e3\u538btar -zxvf Mycat-web.tar.gz -C \/usr\/local\/\n\nC. \u76ee\u5f55\u4ecb\u7ecd    \netc         ----&gt; jetty\u914d\u7f6e\u6587\u4ef6    \nlib         ----&gt; \u4f9d\u8d56jar\u5305    \nmycat-web   ----&gt; mycat-web\u9879\u76ee    \nreadme.txt    \nstart.jar   ----&gt; \u542f\u52a8jar    \nstart.sh    ----&gt; linux\u542f\u52a8\u811a\u672c\n\nD. \u542f\u52a8sh start.sh\n\nE. \u8bbf\u95ee\uff1ahttp:\/\/192.168.200.210:8082\/mycat<\/pre>\n<p>\u914d\u7f6e\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-150246-r7.png\" alt=\"20260305-150246-r7.png\" \/><\/p>\n<h2 id=\"h2-17\">\u8bfb\u5199\u5206\u79bb<\/h2>\n<h3 id=\"h3-18\">1.\u4ecb\u7ecd<\/h3>\n<p>\u4e3b\u4ece\u590d\u5236\u5728\u8fdb\u884c\u6570\u636e\u5e93\u64cd\u4f5c\u65f6\uff0c\u5ba2\u6237\u7aef\u670d\u52a1\u5668\u4f1a\u5148\u5224\u65ad\u76ee\u524d\u64cd\u4f5c\u662f\u8bfb\u8fd8\u662f\u5199\uff0c\u518d\u51b3\u5b9a\u662f\u5206\u914d\u5230\u54ea\u4e2a\u670d\u52a1\u5668\uff0c\u538b\u529b\u8f83\u5927\u3002<br \/>\n\u8bfb\u5199\u5206\u79bb,\u7b80\u5355\u5730\u8bf4\u5c31\u662f\u628a\u5bf9\u6570\u636e\u5e93\u7684\u8bfb\u548c\u5199\u64cd\u4f5c\u5206\u5f00,\u4ee5\u5bf9\u5e94\u4e0d\u540c\u7684\u6570\u636e\u5e93\u670d\u52a1\u5668\u3002\u4e3b\u6570\u636e\u5e93\u63d0\u4f9b\u5199\u64cd\u4f5c\uff0c\u4ece\u6570\u636e\u5e93\u63d0\u4f9b\u8bfb\u64cd\u4f5c\uff0c\u8fd9\u6837\u80fd\u6709\u6548\u5730\u51cf\u8f7b\u5355\u53f0\u6570\u636e\u5e93\u7684\u538b\u529b\u3002<br \/>\n\u901a\u8fc7MyCat\u5373\u53ef\u8f7b\u6613\u5b9e\u73b0\u4e0a\u8ff0\u529f\u80fd\uff0c\u4e0d\u4ec5\u53ef\u4ee5\u652f\u6301MySQL\uff0c\u4e5f\u53ef\u4ee5\u652f\u6301Oracle\u548cSQL Server\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-150918-Be.png\" alt=\"20260305-150918-Be.png\" \/><\/p>\n<h3 id=\"h3-19\">2.\u4e00\u4e3b\u4e00\u4ece<\/h3>\n<p>MySQL\u7684\u4e3b\u4ece\u590d\u5236\uff0c\u662f\u57fa\u4e8e\u4e8c\u8fdb\u5236\u65e5\u5fd7\uff08binlog\uff09\u5b9e\u73b0\u7684\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-150954-I7.png\" alt=\"20260305-150954-I7.png\" \/><\/p>\n<p>\u73af\u5883\u51c6\u5907\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151023-3b.png\" alt=\"20260305-151023-3b.png\" \/><\/p>\n<p>\u4e3b\u4ece\u590d\u5236\u7684\u642d\u5efa\uff0c\u53ef\u4ee5\u53c2\u8003\uff1a\u4e3b\u4ece\u590d\u5236<\/p>\n<h3 id=\"h3-20\">3.\u4e00\u4e3b\u4e00\u4ece\u8bfb\u5199\u5206\u79bb<\/h3>\n<h4>\u914d\u7f6e<\/h4>\n<p>MyCat\u63a7\u5236\u540e\u53f0\u6570\u636e\u5e93\u7684\u8bfb\u5199\u5206\u79bb\u548c\u8d1f\u8f7d\u5747\u8861\u7531schema.xml\u6587\u4ef6datahost\u6807\u7b7e\u7684balance\u5c5e\u6027\u63a7\u5236\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151118-FF.png\" alt=\"20260305-151118-FF.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151128-s0.png\" alt=\"20260305-151128-s0.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151140-eq.png\" alt=\"20260305-151140-eq.png\" \/><\/p>\n<h4>\u6d4b\u8bd5<\/h4>\n<p>\u8fde\u63a5Mycat\uff0c\u5e76\u5728Mycat\u4e2d\u6267\u884cDML\u3001DQL\u67e5\u770b\u662f\u5426\u80fd\u591f\u8fdb\u884c\u8bfb\u5199\u5206\u79bb\u3002<\/p>\n<ul>\n<li>\u4e3b\u8282\u70b9Master\u5b95\u673a\u4e4b\u540e\uff0c\u4e1a\u52a1\u7cfb\u7edf\u5c31\u53ea\u80fd\u591f\u8bfb\uff0c\u800c\u4e0d\u80fd\u5199\u5165\u6570\u636e\u4e86\uff0c\u53ef\u4ee5\u901a\u8fc7\u53cc\u4e3b\u53cc\u4ece<\/li>\n<\/ul>\n<h3 id=\"h3-21\">4.\u53cc\u4e3b\u53cc\u4ece<\/h3>\n<p>\u4e00\u4e2a\u4e3b\u673a Master1 \u7528\u4e8e\u5904\u7406\u6240\u6709\u5199\u8bf7\u6c42\uff0c\u5b83\u7684\u4ece\u673a Slave1 \u548c\u53e6\u4e00\u53f0\u4e3b\u673a Master2 \u8fd8\u6709\u5b83\u7684\u4ece\u673a Slave2 \u8d1f\u8d23\u6240\u6709\u8bfb\u8bf7\u6c42\u3002\u5f53 Master1 \u4e3b\u673a\u5b95\u673a\u540e\uff0cMaster2 \u4e3b\u673a\u8d1f\u8d23\u5199\u8bf7\u6c42\uff0cMaster1 \u3001Master2 \u4e92\u4e3a\u5907\u673a\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151227-9U.png\" alt=\"20260305-151227-9U.png\" \/><\/p>\n<h4>4.1.\u51c6\u5907\u5de5\u4f5c<\/h4>\n<p>\u6211\u4eec\u9700\u8981\u51c6\u59075\u53f0\u670d\u52a1\u5668\uff0c\u5177\u4f53\u7684\u670d\u52a1\u5668\u53ca\u8f6f\u4ef6\u5b89\u88c5\u60c5\u51b5\u5982\u4e0b\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151251-Za.png\" alt=\"20260305-151251-Za.png\" \/><\/p>\n<p>\u5173\u95ed\u4ee5\u4e0a\u6240\u6709\u670d\u52a1\u5668\u7684\u9632\u706b\u5899\uff1a<\/p>\n<ul>\n<li>systemctl stop firewalld<\/li>\n<li>systemctl disable firewalld<\/li>\n<\/ul>\n<h4>4.2.\u4e3b\u5e93\u914d\u7f6e\uff08Master1\uff09<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151343-ij.png\" alt=\"20260305-151343-ij.png\" \/><\/p>\n<h4>4.3.\u4e3b\u5e93\u914d\u7f6e\uff08Master2\uff09<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151405-Uw.png\" alt=\"20260305-151405-Uw.png\" \/><\/p>\n<h4>4.4.\u4e24\u53f0\u4e3b\u5e93\u521b\u5efa\u8d26\u6237\u5e76\u6388\u6743<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151433-Rc.png\" alt=\"20260305-151433-Rc.png\" \/><\/p>\n<h4>4.5.\u4ece\u5e93\u914d\u7f6e\uff08Slave1\uff09<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151500-hc.png\" alt=\"20260305-151500-hc.png\" \/><\/p>\n<h4>4.6.\u4ece\u5e93\u914d\u7f6e\uff08Slave2\uff09<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151539-Ne.png\" alt=\"20260305-151539-Ne.png\" \/><\/p>\n<h4>4.7.\u4e24\u53f0\u4ece\u5e93\u914d\u7f6e\u5173\u8054\u7684\u4e3b\u5e93<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151601-A9.png\" alt=\"20260305-151601-A9.png\" \/><\/p>\n<ul>\n<li>MASTER_HOST\u8ddf\u4ece\u5e93\u6240\u5173\u8054\u7684\u4e3b\u5e93IP\uff0cMASTER_USER\u8ddf\u7528\u6237\u540d\uff0cMASTER_PASSWORD\u8ddf\u7528\u6237\u5bc6\u7801\uff0cMASTER_LOG_FILE\u548cMASTER_LOG_POS\u53ef\u4ee5\u5728\u5bf9\u5e94\u4e3b\u5e93\u4e2d\u901a\u8fc7show master status\u83b7\u5f97<br \/>\n\u4e24\u53f0\u4ece\u5e93 2 \u548c 4 \u90fd\u8981\u914d\u7f6e<\/li>\n<\/ul>\n<h4>4.8.\u4e24\u53f0\u4e3b\u5e93\u76f8\u4e92\u590d\u5236<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151634-5J.png\" alt=\"20260305-151634-5J.png\" \/><\/p>\n<h4>4.9.\u6d4b\u8bd5<\/h4>\n<p>\u5206\u522b\u5728\u4e24\u53f0\u4e3b\u5e93Master1\u3001Master2\u4e0a\u6267\u884cDDL\u3001DML\u8bed\u53e5\uff0c\u67e5\u770b\u6d89\u53ca\u5230\u7684\u6570\u636e\u5e93\u670d\u52a1\u5668\u7684\u6570\u636e\u540c\u6b65\u60c5\u51b5<\/p>\n<pre>&lt;code class=&quot;language-SQL&quot;&gt;create database db01;\nuse db01;\ncreate table tb_user(\n        id in(11)not null primary key,\n        name varchar(50) not null,\n        sex varcahr(1)\n)engine=innodb default charset=utf8mb4\n\ninsert into tb user(id,name,sex) values(l,&#039;Tom&#039;,&#039;1&#039;);\ninsert into tb user(id,name,sex) values(2,&#039;Trigger&#039;,&#039;0&#039;);\ninsert into tb user(id,name,sex) values(3,&#039;Dawn&#039;,&#039;1&#039;);\ninsert into tb user(id,name,sex) values(4,&quot;ack Ma&#039;,&#039;1&#039;);\ninsertinto tb user(id,name,sex) values(5,&#039;Coco&#039;,&#039;0&#039;);\ninsert into tb user(id,name,sex) values(6,&#039;erry&#039;,&#039;1&#039;);<\/pre>\n<h3 id=\"h3-22\">5.\u53cc\u4e3b\u53cc\u4ece\u8bfb\u5199\u5206\u79bb<\/h3>\n<h4>5.1 \u914d\u7f6e<\/h4>\n<p>MyCat\u63a7\u5236\u540e\u53f0\u6570\u636e\u5e93\u7684\u8bfb\u5199\u5206\u79bb\u548c\u8d1f\u8f7d\u5747\u8861\u7531schema.xml\u6587\u4ef6datahost\u6807\u7b7e\u7684balance\u5c5e\u6027\u63a7\u5236\uff0c\u901a\u8fc7writeType\u53caswitchType\u6765\u5b8c\u6210\u5931\u8d25\u81ea\u52a8\u5207\u6362\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151920-Lw.png\" alt=\"20260305-151920-Lw.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u516d)\u2014\u2014\u4e3b\u4ece\u590d\u5236&#038;\u5206\u8868\u5206\u5e93-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-151927-zB.png\" alt=\"20260305-151927-zB.png\" \/><\/p>\n<h4>5.2 \u6d4b\u8bd5<\/h4>\n<p>\u767b\u5f55MyCat\uff0c\u6d4b\u8bd5\u67e5\u8be2\u53ca\u66f4\u65b0\u64cd\u4f5c\uff0c\u5224\u5b9a\u662f\u5426\u80fd\u591f\u8fdb\u884c\u8bfb\u5199\u5206\u79bb\uff0c\u4ee5\u53ca\u8bfb\u5199\u5206\u79bb\u7684\u7b56\u7565\u662f\u5426\u6b63\u786e\u3002<\/p>\n<ul>\n<li>\u67e5\u8be2\u65f6\uff0c\u4ece\u54ea\u4e2a\u670d\u52a1\u5668\u67e5\u8be2\u65f6\u968f\u673a\u7684\uff0c\u63d2\u5165\u65f6\uff0c\u9ed8\u8ba4\u63d2\u5165\u5230master1\u5f53\u4e2d\uff0c\u7136\u540e\u540c\u6b65\u5230\u5176\u4ed6\u4e09\u53f0\u670d\u52a1\u5668<br \/>\n\u5f53\u4e3b\u5e93\u6302\u6389\u4e00\u4e2a\u4e4b\u540e\uff0c\u662f\u5426\u80fd\u591f\u81ea\u52a8\u5207\u6362\u3002<\/li>\n<\/ul>\n<h2 id=\"h2-23\">\u5c0f\u6280\u5de7<\/h2>\n<ol>\n<li>\u5728SQL\u8bed\u53e5\u4e4b\u540e\u52a0\u4e0a\\G\u4f1a\u5c06\u7ed3\u679c\u7684\u8868\u683c\u5f62\u5f0f\u8f6c\u6362\u6210\u884c\u6587\u672c\u5f62\u5f0f<\/li>\n<li>\u67e5\u770bMysql\u6570\u636e\u5e93\u5360\u7528\u7a7a\u95f4\uff1a<\/li>\n<\/ol>\n<pre>SELECT table_schema &quot;Database Name&quot;\n     , SUM(data_length + index_length) \/ (1024 * 1024) &quot;Database Size in MB&quot;\nFROM information_schema.TABLES\nGROUP BY table_schema;<\/pre>\n","excerpt":"<p>\u4e3b\u4ece\u590d\u5236 \u6982\u8ff0 \u4e3b\u4ece\u590d\u5236\u662f\u6307\u5c06\u4e3b\u6570\u636e\u5e93\u7684DDL \u548c DML \u64cd\u4f5c\u901a\u8fc7\u4e8c\u8fdb\u5236\u65e5\u5fd7\u4f20\u5230\u4ece\u5e93\u670d\u52a1\u5668\u4e2d\uff0c\u7136\u540e\u5728\u4ece\u5e93\u4e0a\u5bf9\u8fd9\u4e9b\u65e5\u5fd7\u91cd\u65b0\u6267\u884c\uff08\u4e5f\u53eb\u91cd\u505a\uff09\uff0c\u4ece\u800c \u4f7f\u5f97\u4ece\u5e93\u548c\u4e3b\u5e93\u7684\u6570\u636e\u4fdd\u6301\u540c\u6b65\u3002 MySQL\u652f\u6301\u4e00\u53f0\u4e3b\u5e93\u540c\u65f6\u5411\u591a\u53f0\u4ece\u5e93\u8fdb\u884c\u590d\u5236\uff0c \u4ece\u5e93\u540c\u65f6\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u5176\u4ed6\u4ece\u670d\u52a1 &#8230;<\/p>\n","date":"2026-03-03 16:51:39","modified":"2026-03-05 17:08:36","categories":[{"id":64,"slug":"mysql","title":"MySql","description":"","parent":63,"post_count":10},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":65,"slug":"mysql","title":"MySql","description":"","post_count":14},{"id":31,"slug":"%e6%95%b0%e6%8d%ae%e5%ba%93","title":"\u6570\u636e\u5e93","description":"","post_count":33}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"bigfa_ding":["1"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"bpu":["1|20260305"],"views":["353"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2918,"type":"post","slug":"mysql%e8%bf%9b%e9%98%b6%e4%ba%94-%e9%94%81%e4%ba%8b%e5%8a%a1%e5%8e%9f%e7%90%86","url":"https:\/\/qkongtao.cn\/?p=2918","status":"publish","title":"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406","title_plain":"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406","content":"<h2 id=\"h2-0\">\u9501<\/h2>\n<p>\u9501\u662f\u8ba1\u7b97\u673a\u534f\u8c03\u591a\u4e2a\u8fdb\u7a0b\u6216\u7ebf\u7a0b\u5e76\u53d1\u8bbf\u95ee\u67d0\u4e00\u8d44\u6e90\u7684\u673a\u5236\u3002\u5728\u6570\u636e\u5e93\u4e2d\uff0c\u9664\u4f20\u7edf\u7684\u8ba1\u7b97\u8d44\u6e90(CPU\u3001RAM\u3001I\/0)\u7684\u4e89\u7528\u4ee5\u5916\uff0c\u6570\u636e\u4e5f\u662f\u4e00\u79cd\u4f9b\u8bb8\u591a\u7528\u6237\u5171\u4eab\u7684\u8d44\u6e90\u3002\u5982\u4f55\u4fdd\u8bc1\u6570\u636e\u5e76\u53d1\u8bbf\u95ee\u7684\u4e00\u81f4\u6027\u3001\u6709\u6548\u6027\u662f\u6240\u6709\u6570\u636e\u5e93\u5fc5\u987b\u89e3\u51b3\u7684\u4e00\u4e2a\u95ee\u9898\uff0c\u9501\u51b2\u7a81\u4e5f\u662f\u5f71\u54cd\u6570\u636e\u5e93\u5e76\u53d1\u8bbf\u95ee\u6027\u80fd\u7684\u4e00\u4e2a\u91cd\u8981\u56e0\u7d20\u3002\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u6765\u8bf4\uff0c\u9501\u5bf9\u6570\u636e\u5e93\u800c\u8a00\u663e\u5f97\u5c24\u5176\u91cd\u8981\uff0c\u4e5f\u66f4\u52a0\u590d\u6742\u3002<\/p>\n<p>MySQL\u4e2d\u7684\u9501\uff0c\u6309\u7167\u9501\u7684\u7c92\u5ea6\u5206\uff0c\u5206\u4e3a\u4e00\u4e0b\u4e09\u7c7b\uff1a<\/p>\n<ol>\n<li>\u5168\u5c40\u9501\uff1a\u9501\u5b9a\u6570\u636e\u5e93\u4e2d\u7684\u6240\u6709\u8868\u3002<\/li>\n<li>\u8868\u7ea7\u9501\uff1a\u6bcf\u6b21\u64cd\u4f5c\u9501\u4f4f\u6574\u5f20\u8868\u3002<\/li>\n<li>\u884c\u7ea7\u9501\uff1a\u6bcf\u6b21\u64cd\u4f5c\u9501\u4f4f\u5bf9\u5e94\u7684\u884c\u6570\u636e\u3002<\/li>\n<\/ol>\n<h3 id=\"h3-1\">\u5168\u5c40\u9501<\/h3>\n<p>\u5168\u5c40\u9501\u5c31\u662f\u5bf9\u6574\u4e2a\u6570\u636e\u5e93\u5b9e\u4f8b\u52a0\u9501\uff0c\u52a0\u9501\u540e\u6574\u4e2a\u5b9e\u4f8b\u5c31\u5904\u4e8e\u53ea\u8bfb\u72b6\u6001\uff0c\u540e\u7eed\u7684DML\u7684\u5199\u8bed\u53e5\uff0cDDL\u8bed\u53e5\uff0c\u5df2\u7ecf\u66f4\u65b0\u64cd\u4f5c\u7684\u4e8b\u52a1\u63d0\u4ea4\u8bed\u53e5\u90fd\u5c06\u88ab\u963b\u585e\u3002<\/p>\n<p>\u5176\u5178\u578b\u7684\u4f7f\u7528\u573a\u666f\u662f\u505a\u5168\u5e93\u7684\u903b\u8f91\u5907\u4efd\uff0c\u5bf9\u6240\u6709\u7684\u8868\u8fdb\u884c\u9501\u5b9a\uff0c\u4ece\u800c\u83b7\u53d6\u4e00\u81f4\u6027\u89c6\u56fe\uff0c\u4fdd\u8bc1\u6570\u636e\u7684\u5b8c\u6574\u6027\u3002<\/p>\n<p>\u57fa\u672c\u64cd\u4f5c\uff1a<br \/>\n\u4f7f\u7528\u5168\u5c40\u9501\uff1aflush tables with read lock<br \/>\n\u91ca\u653e\u5168\u5c40\u9501\uff1aunlock tables<\/p>\n<p>\u6f14\u793a\u56fe\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-163956-NW.png\" alt=\"20260303-163956-NW.png\" \/><\/p>\n<p>\u7279\u70b9\uff1a<\/p>\n<p>\u6570\u636e\u5e93\u4e2d\u52a0\u5168\u5c40\u9501\uff0c\u662f\u4e00\u4e2a\u6bd4\u8f83\u91cd\u7684\u64cd\u4f5c\uff0c\u5b58\u5728\u4ee5\u4e0b\u95ee\u9898:<\/p>\n<ol>\n<li>\u5982\u679c\u5728\u4e3b\u5e93\u4e0a\u5907\u4efd\uff0c\u90a3\u4e48\u5728\u5907\u4efd\u671f\u95f4\u90fd\u4e0d\u80fd\u6267\u884c\u66f4\u65b0\uff0c\u4e1a\u52a1\u57fa\u672c\u4e0a\u5c31\u5f97\u505c\u6446\u3002<\/li>\n<li>\u5982\u679c\u5728\u4ece\u5e93\u4e0a\u5907\u4efd\uff0c\u90a3\u4e48\u5728\u5907\u4efd\u671f\u95f4\u4ece\u5e93\u4e0d\u80fd\u6267\u884c\u4e3b\u5e93\u540c\u6b65\u8fc7\u6765\u7684\u4e8c\u8fdb\u5236\u65e5\u5fd7(binlog)\uff0c\u4f1a\u5bfc\u81f4\u4e3b\u4ece\u5ef6\u8fdf\u3002\uff08\u8be5\u7ed3\u6784\u4f1a\u5728\u540e\u7eed\u4e3b\u4ece\u590d\u5236\u8bb2\u89e3\uff09<br \/>\n\u89e3\u51b3\u65b9\u6cd5\uff1a<\/li>\n<\/ol>\n<p>\u5728InnoDB\u5f15\u64ce\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u5907\u4efd\u65f6\u52a0\u4e0a\u53c2\u6570 \u2013single-transaction \u53c2\u6570\u6765\u5b8c\u6210\u4e0d\u52a0\u9501\u7684\u4e00\u81f4\u6027\u6570\u636e\u5907\u4efd\u3002<\/p>\n<pre>mysqldump --single-transaction -uroot -p123456 itcast &gt; itcast.sql<\/pre>\n<p>\uff08\u53ea\u9002\u7528\u4e8e\u652f\u6301\u300c\u53ef\u91cd\u590d\u8bfb\u9694\u79bb\u7ea7\u522b\u7684\u4e8b\u52a1\u300d\u7684\u5b58\u50a8\u5f15\u64ce\uff09<\/p>\n<p>\u539f\u7406\u8865\u5145\uff1a\u901a\u8fc7\u52a0\u4e0a\u8fd9\u4e2a\u53c2\u6570\uff0c\u786e\u4fdd\u4e86\u5728\u5907\u4efd\u5f00\u59cb\u65f6\u521b\u5efa\u4e00\u4e2a\u4e00\u81f4\u6027\u7684\u5feb\u7167\uff0c\u901a\u8fc7\u542f\u52a8\u4e00\u4e2a\u65b0\u7684\u4e8b\u52a1\u6765\u5b9e\u73b0\u8fd9\u4e00\u70b9\u3002\uff08\u8be5\u4e8b\u52a1\u7684\u9694\u79bb\u7ea7\u522b\u662fRepeatable Read\u7ea7\u522b\uff09\uff0c\u4ece\u800c\u5b9e\u73b0\u5728\u8be5\u4e8b\u52a1\u8bfb\u53d6\u4e0b\u4e00\u76f4\u8bfb\u53d6\u7684\u662f\u521b\u5efa\u65f6\u7684\u6570\u636e\uff0c\u800c\u4e0d\u5f71\u54cd\u5176\u4ed6\u4e8b\u52a1\u7684\u8bfb\u5199\u64cd\u4f5c\u3002<\/p>\n<h3 id=\"h3-2\">\u8868\u7ea7\u9501<\/h3>\n<p>\u6bcf\u6b21\u64cd\u4f5c\u9501\u4f4f\u6574\u5f20\u8868\u3002\u9501\u5b9a\u7c92\u5ea6\u5927\uff0c\u53d1\u751f\u9501\u7684\u51b2\u7a81\u7684\u6982\u7387\u6700\u9ad8\uff0c\u5e76\u53d1\u5ea6\u6700\u4f4e\u3002\u5e94\u7528\u5728MyISAM\u3001InnoDB\u3001BDB\u7b49\u5b58\u50a8\u5f15\u64ce\u4e2d\u3002<\/p>\n<p>\u5bf9\u4e8e\u8868\u7ea7\u9501\uff0c\u4e3b\u8981\u5206\u4e3a\u4e00\u4e0b\u4e09\u7c7b\uff1a<\/p>\n<ol>\n<li>\u8868\u9501<\/li>\n<li>\u5143\u6570\u636e\u9501\uff08meta data lock\uff0cMDL\uff09<\/li>\n<li>\u610f\u5411\u9501<\/li>\n<\/ol>\n<h4>\u8868\u9501<\/h4>\n<p>\u5bf9\u4e8e\u8868\u9501\uff0c\u5206\u4e3a\u4e24\u7c7b\uff1a<\/p>\n<p>\u8868\u5171\u4eab\u8bfb\u9501\uff08read lock\uff09<br \/>\n\u8868\u72ec\u5360\u5199\u9501\uff08write lock\uff09<\/p>\n<p><strong>\u8bfb\u9501\u4e0d\u4f1a\u963b\u585e\u5176\u4ed6\u5ba2\u6237\u7aef\u7684\u8bfb\uff0c\u4f46\u662f\u4f1a\u963b\u585e\u5199\u3002\u5199\u9501\u65e2\u4f1a\u963b\u585e\u5176\u4ed6\u5ba2\u6237\u7aef\u7684\u8bfb\uff0c\u53c8\u4f1a\u963b\u585e\u5176\u4ed6\u5ba2\u6237\u7aef\u7684\u5199\u3002<\/strong><\/p>\n<p>\u8bed\u6cd5\uff1a<\/p>\n<pre>\/\/\u8868\u7ea7\u522b\u7684\u5171\u4eab\u9501\uff0c\u4e5f\u5c31\u662f\u8bfb\u9501\uff1b\n\/\/\u5141\u8bb8\u5f53\u524d\u4f1a\u8bdd\u8bfb\u53d6\u88ab\u9501\u5b9a\u7684\u8868\uff0c\u4f46\u963b\u6b62\u5176\u4ed6\u4f1a\u8bdd\u5bf9\u8fd9\u4e9b\u8868\u8fdb\u884c\u5199\u64cd\u4f5c\u3002\nlock tebles t_student read;\n\n\/\/\u8868\u7ea7\u9501\u7684\u72ec\u5360\u9501\uff0c\u4e5f\u662f\u5199\u9501\uff1b\n\/\/\u5141\u8bb8\u5f53\u524d\u4f1a\u8bdd\u5bf9\u8868\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\uff0c\u4f46\u963b\u6b62\u5176\u4ed6\u4f1a\u8bdd\u5bf9\u8fd9\u4e9b\u8868\u8fdb\u884c\u4efb\u4f55\u64cd\u4f5c\uff08\u8bfb\u6216\u5199\uff09\u3002\nlock tables t_stuent write;<\/pre>\n<p>\u91ca\u653e\u6240\u6709\u9501\uff1a<\/p>\n<pre>unlock tables \uff08\u4f1a\u8bdd\u9000\u51fa\uff0c\u4e5f\u4f1a\u91ca\u653e\u6240\u6709\u9501\uff09<\/pre>\n<h4>\u5143\u6570\u636e\u9501<\/h4>\n<p>MDL\u52a0\u9501\u8fc7\u7a0b\u662f\u7cfb\u7edf\u81ea\u52a8\u63a7\u5236\uff0c\u65e0\u9700\u663e\u5f0f\u4f7f\u7528\uff0c\u5728\u8bbf\u95ee\u4e00\u5f20\u8868\u7684\u65f6\u5019\u4f1a\u81ea\u52a8\u52a0\u4e0a\u3002MDL\u9501\u4e3b\u8981\u4f5c\u7528\u662f\u7ef4\u62a4\u8868\u5143\u6570\u636e\u7684\u6570\u636e\u4e00\u81f4\u6027\uff0c\u5728\u8868<br \/>\n\u4e0a\u6709\u6d3b\u52a8\u4e8b\u52a1\u7684\u65f6\u5019\uff0c\u4e0d\u53ef\u4ee5\u5bf9\u5143\u6570\u636e\u8fdb\u884c\u5199\u5165\u64cd\u4f5c\u3002\u4e3a\u4e86\u907f\u514dDML\u4e0eDDL\u51b2\u7a81\uff0c\u4fdd\u8bc1\u8bfb\u5199\u7684\u6b63\u786e\u6027\u3002<\/p>\n<ul>\n<li>\u5bf9\u4e00\u5f20\u8868\u8fdb\u884c CRUD \u64cd\u4f5c\u65f6\uff0c\u52a0\u7684\u662f MDL \u8bfb\u9501\uff1b<\/li>\n<li>\u5bf9\u4e00\u5f20\u8868\u505a\u7ed3\u6784\u53d8\u66f4\u64cd\u4f5c\u7684\u65f6\u5019\uff0c\u52a0\u7684\u662f MDL \u5199\u9501\uff1b<\/li>\n<\/ul>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-164716-8t.png\" alt=\"20260303-164716-8t.png\" \/><\/p>\n<p>\u67e5\u770b\u5143\u6570\u636e\u9501\uff1a<\/p>\n<pre>select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema.metadata_locks;<\/pre>\n<h4>\u610f\u5411\u9501<\/h4>\n<p>\u4e3a\u4e86\u907f\u514dDML\u5728\u6267\u884c\u65f6\uff0c\u52a0\u7684\u884c\u9501\u4e0e\u8868\u9501\u7684\u51b2\u7a81\uff0c\u5728InnoDB\u4e2d\u5f15\u5165\u4e86\u610f\u5411\u9501\uff0c\u4f7f\u5f97\u8868\u9501\u4e0d\u7528\u68c0\u67e5\u6bcf\u884c\u6570\u636e\u662f\u5426\u52a0\u9501\uff0c\u4f7f\u7528\u610f\u5411\u9501\u6765\u51cf\u5c11\u8868\u9501\u7684\u68c0\u67e5\u3002<\/p>\n<p>\u610f\u5411\u5171\u4eab\u9501\u548c\u610f\u5411\u72ec\u5360\u9501\u662f\u8868\u7ea7\u9501\uff0c\u4e0d\u4f1a\u548c\u884c\u7ea7\u7684\u5171\u4eab\u9501\u548c\u72ec\u5360\u9501\u53d1\u751f\u51b2\u7a81\uff0c\u800c\u4e14\u610f\u5411\u9501\u4e4b\u95f4\u4e5f\u4e0d\u4f1a\u53d1\u751f\u51b2\u7a81\uff0c\u53ea\u4f1a\u548c\u5171\u4eab\u8868\u9501\uff08lock tables \u2026 read)\u548c\u72ec\u5360\u8868\u9501\uff08lock tables \u2026 write\uff09\u53d1\u751f\u51b2\u7a81<\/p>\n<p>\u5982\u679c\u6ca1\u6709\u300c\u610f\u5411\u9501\u300d\uff0c\u90a3\u4e48\u52a0\u300c\u72ec\u5360\u8868\u9501\u300d\u65f6\uff0c\u5c31\u9700\u8981\u904d\u5386\u8868\u91cc\u6240\u6709\u8bb0\u5f55\uff0c\u67e5\u770b\u662f\u5426\u6709\u8bb0\u5f55\u5b58\u5728\u72ec\u5360\u9501\uff0c\u8fd9\u6837\u6548\u7387\u4f1a\u5f88\u6162\u3002<\/p>\n<p>\u90a3\u4e48\u6709\u4e86\u300c\u610f\u5411\u9501\u300d\uff0c\u7531\u4e8e\u5728\u5bf9\u8bb0\u5f55\u52a0\u72ec\u5360\u9501\u524d\uff0c\u5148\u4f1a\u52a0\u4e0a\u8868\u7ea7\u522b\u7684\u610f\u5411\u72ec\u5360\u9501\uff0c\u90a3\u4e48\u5728\u52a0\u300c\u72ec\u5360\u8868\u9501\u300d\u65f6\uff0c\u76f4\u63a5\u67e5\u8be5\u8868\u662f\u5426\u6709\u610f\u5411\u72ec\u5360\u9501\uff0c\u5982\u679c\u6709\u5c31\u610f\u5473\u7740\u8868\u91cc\u5df2\u7ecf\u6709\u8bb0\u5f55\u88ab\u52a0\u4e86\u72ec\u5360\u9501\uff0c\u8fd9\u6837\u5c31\u4e0d\u7528\u53bb\u904d\u5386\u8868\u91cc\u7684\u8bb0\u5f55\u3002<\/p>\n<p>\u610f\u5411\u9501\u7684\u76ee\u7684\u662f\u4e3a\u4e86\u5feb\u901f\u5224\u65ad\u8868\u91cc\u662f\u5426\u6709\u8bb0\u5f55\u88ab\u52a0\u9501\u3002<\/p>\n<p>\u52a0\u9501\u65b9\u5f0f\uff1a<br \/>\n\u610f\u5411\u5171\u4eab\u9501\uff1a\uff08\u5148\u5728\u8868\u4e0a\u52a0\u4e0a\u610f\u5411\u5171\u4eab\u9501\uff0c\u7136\u540e\u5bf9\u8bfb\u53d6\u7684\u8bb0\u5f55\u52a0\u5171\u4eab\u9501\uff09<br \/>\n\u7531 select ... lock in share mode \u6dfb\u52a0<\/p>\n<p>\u610f\u5411\u72ec\u5360\u9501\uff1a\uff08\u5148\u8868\u4e0a\u52a0\u4e0a\u610f\u5411\u72ec\u5360\u9501\uff0c\u7136\u540e\u5bf9\u8bfb\u53d6\u7684\u8bb0\u5f55\u52a0\u72ec\u5360\u9501\uff09<br \/>\n\u7531 insert\u3001update\u3001delete\u3001select ... for update \u6dfb\u52a0<\/p>\n<h3 id=\"h3-3\">\u884c\u7ea7\u9501<\/h3>\n<p>\u884c\u7ea7\u9501\uff0c\u6bcf\u6b21\u64cd\u4f5c\u9501\u4f4f\u5bf9\u5e94\u7684\u884c\u6570\u636e\u3002\u9501\u5b9a\u7c92\u5ea6\u6700\u5c0f\uff0c\u53d1\u751f\u9501\u51b2\u7a81\u7684\u6982\u7387\u6700\u4f4e\uff0c\u5e76\u53d1\u5ea6\u6700\u9ad8\u3002\u5e94\u7528\u5728InnoDB\u5b58\u50a8\u5f15\u64ce\u4e2d\u3002<\/p>\n<ol>\n<li>\u884c\u9501(Record Lock):\u9501\u5b9a\u5355\u4e2a\u884c\u8bb0\u5f55\u7684\u9501\uff0c\u9632\u6b62\u5176\u4ed6\u4e8b\u52a1\u5bf9\u6b64\u884c\u8fdb\u884cupdate\u548cdelete\u3002\u5728RC\u3001RR\u9694\u79bb\u7ea7\u522b\u4e0b\u90fd\u652f\u6301\u3002<\/li>\n<li>\u95f4\u9699\u9501(GapLock):\u9501\u5b9a\u7d22\u5f15\u8bb0\u5f55\u95f4\u9699(\u4e0d\u542b\u8be5\u8bb0\u5f55)\uff0c\u786e\u4fdd\u7d22\u5f15\u8bb0\u5f55\u95f4\u9699\u4e0d\u53d8\uff0c\u9632\u6b62\u5176\u4ed6\u4e8b\u52a1\u5728\u8fd9\u4e2a\u95f4\u9699\u8fdb\u884cinsert\uff0c\u4ea7\u751f\u5e7b\u8bfb\u3002\u5728RR\u9694\u79bb\u7ea7\u522b\u4e0b\u90fd\u652f\u6301\u3002<\/li>\n<li>\u4e34\u952e\u9501(Next-Key Lock):\u884c\u9501\u548c\u95f4\u9699\u9501\u7ec4\u5408\uff0c\u540c\u65f6\u9501\u4f4f\u6570\u636e\uff0c\u5e76\u9501\u4f4f\u6570\u636e\u524d\u9762\u7684\u95f4\u9699Gap\u3002\u5728RR\u9694\u79bb\u7ea7\u522b\u4e0b\u652f\u6301\u3002<\/li>\n<\/ol>\n<h4>Record Lock\uff08\u884c\u9501\uff09<\/h4>\n<p>Record Lock \u79f0\u4e3a\u8bb0\u5f55\u9501\uff0c\u9501\u4f4f\u7684\u662f\u4e00\u6761\u8bb0\u5f55\u3002\u800c\u4e14\u8bb0\u5f55\u9501\u662f\u6709 S \u9501\u548c X \u9501\u4e4b\u5206\u3002<\/p>\n<p>InnoDB\u5b9e\u73b0\u4e86\u4ee5\u4e0b\u4e24\u79cd\u7c7b\u578b\u7684\u884c\u9501\uff1a<\/p>\n<ul>\n<li>\u5171\u4eab\u9501(S)\uff1a\u5141\u8bb8\u4e00\u4e2a\u4e8b\u52a1\u53bb\u8bfb\u4e00\u884c\uff0c\u963b\u6b62\u5176\u4ed6\u4e8b\u52a1\u83b7\u5f97\u76f8\u540c\u6570\u636e\u96c6\u7684\u6392\u5b83\u9501\u3002<\/li>\n<li>\u6392\u4ed6\u9501(X)\uff1a\u5141\u8bb8\u83b7\u53d6\u6392\u4ed6\u9501\u7684\u4e8b\u52a1\u66f4\u65b0\u6570\u636e\uff0c\u963b\u6b62\u5176\u4ed6\u4e8b\u52a1\u83b7\u5f97\u76f8\u540c\u6570\u636e\u96c6\u7684\u5171\u4eab\u9501\u548c\u6392\u4ed6\u9501\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-165101-Oq.png\" alt=\"20260303-165101-Oq.png\" \/><\/li>\n<\/ul>\n<p>\u884c\u9501\u7c7b\u578b\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-165131-MO.png\" alt=\"20260303-165131-MO.png\" \/><\/p>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cInnoDB\u5728 REPEATABLE READ\u4e8b\u52a1\u9694\u79bb\u7ea7\u522b\u8fd0\u884c\uff0cInnoDB\u4f7f\u7528 next-key\u9501\u8fdb\u884c\u641c\u7d22\u548c\u7d22\u5f15\u626b\u63cf\uff0c\u4ee5\u9632\u6b62\u5e7b\u8bfb\u3002<\/p>\n<p>\u6ce8\u610f\uff1a<\/p>\n<ol>\n<li>\u9488\u5bf9\u552f\u4e00\u7d22\u5f15\u8fdb\u884c\u68c0\u7d22\u65f6\uff0c\u5bf9\u5df2\u5b58\u5728\u7684\u8bb0\u5f55\u8fdb\u884c\u7b49\u503c\u5339\u914d\u65f6\uff0c\u5c06\u4f1a\u81ea\u52a8\u4f18\u5316\u4e3a\u884c\u9501\u3002<\/li>\n<li><strong>InnoDB\u7684\u884c\u9501\u662f\u9488\u5bf9\u4e8e\u7d22\u5f15\u52a0\u7684\u9501\uff0c\u4e0d\u901a\u8fc7\u7d22\u5f15\u6761\u4ef6\u68c0\u7d22\u6570\u636e\uff0c\u90a3\u4e48!nnoDB\u5c06\u5bf9\u8868\u4e2d\u7684\u6240\u6709\u8bb0\u5f55\u52a0\u9501\uff0c\u6b64\u65f6 \u5c31\u4f1a\u5347\u7ea7\u4e3a\u8868\u9501<\/strong>\u3002<\/li>\n<\/ol>\n<p>\u67e5\u770b\u610f\u5411\u9501\u53ca\u884c\u9501\u7684\u52a0\u9501\u60c5\u51b5\uff1a<\/p>\n<pre>select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from peformance_schema.data_locks;<\/pre>\n<h4>Gap Lock\uff08\u95f4\u9699\u9501\uff09<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-165644-0a.png\" alt=\"20260303-165644-0a.png\" \/><\/p>\n<h4>Next-Key Lock\uff08\u4e34\u952e\u9501\uff09<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-165719-Ch.png\" alt=\"20260303-165719-Ch.png\" \/><\/p>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cInnODB\u5728 REPEATABLE READ\u4e8b\u52a1\u9694\u79bb\u7ea7\u522b\u8fd0\u884c\uff0cInnoDB\u4f7f\u7528 next-key \u9501\u8fdb\u884c\u641c\u7d22\u548c\u7d22\u5f15\u626b\u63cf\uff0c\u4ee5\u9632\u6b62\u5e7b\u8bfb\u3002<\/p>\n<ol>\n<li>\u7d22\u5f15\u4e0a\u7684\u7b49\u503c\u67e5\u8be2(\u552f\u4e00\u7d22\u5f15)\uff0c\u7ed9\u4e0d\u5b58\u5728\u7684\u8bb0\u5f55\u52a0\u9501\u65f6,\u4f18\u5316\u4e3a\u95f4\u9699\u9501 \u3002<\/li>\n<li>\u7d22\u5f15\u4e0a\u7684\u7b49\u503c\u67e5\u8be2(\u666e\u901a\u7d22\u5f15)\uff0c\u5411\u53f3\u904d\u5386\u65f6\u6700\u540e\u4e00\u4e2a\u503c\u4e0d\u6ee1\u8db3\u67e5\u8be2\u9700\u6c42\u65f6\uff0cnext-keylock\u9000\u5316\u4e3a\u95f4\u9699\u9501\u3002<\/li>\n<li>\u7d22\u5f15\u4e0a\u7684\u8303\u56f4\u67e5\u8be2(\u552f\u4e00\u7d22\u5f15)\u2013\u4f1a\u8bbf\u95ee\u5230\u4e0d\u6ee1\u8db3\u6761\u4ef6\u7684\u7b2c\u4e00\u4e2a\u503c\u4e3a\u6b62\u3002<\/li>\n<\/ol>\n<h2 id=\"h2-4\">InnoDB\u5f15\u64ce<\/h2>\n<h3 id=\"h3-5\">\u903b\u8f91\u5b58\u50a8\u7ed3\u6784<\/h3>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183726-fY.png\" alt=\"20260303-183726-fY.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183731-Vr.png\" alt=\"20260303-183731-Vr.png\" \/><\/p>\n<h3 id=\"h3-6\">\u67b6\u6784<\/h3>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183745-36.png\" alt=\"20260303-183745-36.png\" \/><\/p>\n<h4>\u5185\u5b58\u67b6\u6784<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183757-CK.png\" alt=\"20260303-183757-CK.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183806-NK.png\" alt=\"20260303-183806-NK.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183833-vD.png\" alt=\"20260303-183833-vD.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183905-HH.png\" alt=\"20260303-183905-HH.png\" \/><\/p>\n<h4>\u78c1\u76d8\u7ed3\u6784<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183933-1N.png\" alt=\"20260303-183933-1N.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183938-3E.png\" alt=\"20260303-183938-3E.png\" \/><\/p>\n<h4>\u540e\u53f0\u7ebf\u7a0b<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-183954-hz.png\" alt=\"20260303-183954-hz.png\" \/><\/p>\n<h3 id=\"h3-7\">\u4e8b\u52a1\u539f\u7406<\/h3>\n<p>\u4e8b\u52a1\uff1a<br \/>\n\u4e8b\u52a1 \u662f\u4e00\u7ec4\u64cd\u4f5c\u7684\u96c6\u5408\uff0c\u5b83\u662f\u4e00\u4e2a\u4e0d\u53ef\u5206\u5272\u7684\u5de5\u4f5c\u5355\u4f4d\uff0c\u4e8b\u52a1\u4f1a\u628a\u6240\u6709\u7684\u64cd\u4f5c\u4f5c\u4e3a\u4e00\u4e2a\u6574\u4f53\u4e00\u8d77\u5411\u7cfb\u7edf\u63d0\u4ea4\u6216\u64a4\u9500\u64cd\u4f5c\u8bf7\u6c42\uff0c\u5373\u8fd9\u4e9b\u64cd\u4f5c\u8981\u4e48\u540c\u65f6\u6210\u529f\uff0c\u8981\u4e48\u540c\u65f6\u5931\u8d25\u3002<\/p>\n<p>\u7279\u5f81\uff1a<\/p>\n<ul>\n<li>\u539f\u5b50\u6027(Atomicity)\uff1a\u4e8b\u52a1\u662f\u4e0d\u53ef\u5206\u5272\u7684\u6700\u5c0f\u64cd\u4f5c\u5355\u5143\uff0c\u8981\u4e48\u5168\u90e8\u6210\u529f\uff0c\u8981\u4e48\u5168\u90e8\u5931\u8d25\u3002<\/li>\n<li>\u4e00\u81f4\u6027(Consistency) \uff1a\u4e8b\u52a1\u5b8c\u6210\u65f6\uff0c\u5fc5\u987b\u4f7f\u6240\u6709\u7684\u6570\u636e\u90fd\u4fdd\u6301\u4e00\u81f4\u72b6\u6001\u3002<\/li>\n<li>\u9694\u79bb\u6027(lsolation)\uff1a\u6570\u636e\u5e93\u7cfb\u7edf\u63d0\u4f9b\u7684\u9694\u79bb\u673a\u5236\uff0c\u4fdd\u8bc1\u4e8b\u52a1\u5728\u4e0d\u53d7\u5916\u90e8\u5e76\u53d1\u64cd\u4f5c\u5f71\u54cd\u7684\u72ec\u7acb\u73af\u5883\u4e0b\u8fd0\u884c\u3002<\/li>\n<li>\u6301\u4e45\u6027(Durability)\uff1a\u4e8b\u52a1\u4e00\u65e6\u63d0\u4ea4\u6216\u56de\u6eda\uff0c\u5b83\u5bf9\u6570\u636e\u5e93\u4e2d\u7684\u6570\u636e\u7684\u6539\u53d8\u5c31\u662f\u6c38\u4e45\u7684\u3002<\/li>\n<\/ul>\n<p>\u7279\u6027\u539f\u7406\u5206\u7c7b\u56fe\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-184053-PA.png\" alt=\"20260303-184053-PA.png\" \/><\/p>\n<h4>redo log<\/h4>\n<p>\u91cd\u505a\u65e5\u5fd7\uff0c\u8bb0\u5f55\u7684\u662f\u4e8b\u52a1\u63d0\u4ea4\u65f6\u6570\u636e\u9875\u7684\u7269\u7406\u4fee\u6539\uff0c\u662f\u7528\u6765\u5b9e\u73b0\u4e8b\u52a1\u7684\u6301\u4e45\u6027\u3002<\/p>\n<p>\u8be5\u65e5\u5fd7\u6587\u4ef6\u7531\u4e24\u90e8\u5206\u7ec4\u6210:\u91cd\u505a\u65e5\u5fd7\u7f13\u51b2(redo log buffer)\u4ee5\u53ca\u91cd\u505a\u65e5\u5fd7\u6587\u4ef6(redo log file),\u524d\u8005\u662f\u5728\u5185\u5b58\u4e2d\uff0c\u540e\u8005\u5728\u78c1\u76d8\u4e2d\u3002\u5f53\u4e8b\u52a1\u63d0\u4ea4\u4e4b\u540e\u4f1a\u628a\u6240\u6709\u4fee\u6539\u4fe1\u606f\u90fd\u5b58\u5230\u8be5\u65e5\u5fd7\u6587\u4ef6\u4e2d,\u7528\u4e8e\u5728\u5237\u65b0\u810f\u9875\u5230\u78c1\u76d8,\u53d1\u751f\u9519\u8bef\u65f6,\u8fdb\u884c\u6570\u636e\u6062\u590d\u4f7f\u7528\u3002<\/p>\n<p>Buffer Pool\u5728\u4ea7\u751f\u810f\u9875\u6570\u636e\u7684\u65f6\u5019\uff0c\u4f1a\u5148\u5c06\u6570\u636e\u5b58\u50a8\u5230 redo log buffer \u518d\u5b58\u50a8\u5230 redo log \u4e2d\u8fdb\u884c\u78c1\u76d8\u6301\u4e45\u5316\u5b58\u50a8\uff0c\u5728\u5185\u5b58\u51fa\u73b0\u5f02\u5e38\uff08\u6bd4\u5982\u7a81\u7136\u65ad\u7535\uff09\u65f6\uff0c\u901a\u8fc7redo log\u4e2d\u6301\u4e45\u5316\u7684\u6570\u636e\u8fdb\u884c\u56de\u6eda\u3002\u8fc7\u7a0b\u5982\u4e0b\u56fe\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-184115-kj.png\" alt=\"20260303-184115-kj.png\" \/><\/p>\n<p>redo log \u8981\u5199\u5230\u78c1\u76d8\uff0c\u6570\u636e\u4e5f\u8981\u5199\u78c1\u76d8\uff0c\u4e3a\u4ec0\u4e48\u8981\u591a\u6b64\u4e00\u4e3e?<br \/>\n\u5199\u5165 redo log \u7684\u65b9\u5f0f\u4f7f\u7528\u4e86\u8ffd\u52a0\u64cd\u4f5c\uff0c\u6240\u4ee5\u78c1\u76d8\u64cd\u4f5c\u662f\u987a\u5e8f\u5199\uff0c\u800c\u5199\u5165\u6570\u636e\u9700\u8981\u5148\u627e\u5230\u5199\u5165\u4f4d\u7f6e\uff0c\u7136\u540e\u624d\u5199\u5230\u78c1\u76d8\uff0c\u6240\u4ee5\u78c1\u76d8\u64cd\u4f5c\u662f\u968f\u673a\u5199\u3002<\/p>\n<h4>undo log<\/h4>\n<p>\u56de\u6eda\u65e5\u5fd7\uff0c\u7528\u4e8e\u8bb0\u5f55\u6570\u636e\u88ab\u4fee\u6539\u524d\u7684\u4fe1\u606f\uff0c\u4f5c\u7528\u5305\u542b\u4e24\u4e2a:\u63d0\u4f9b\u56de\u6eda \u548c MVCC(\u591a\u7248\u672c\u5e76\u53d1\u63a7\u5236)\u3002<\/p>\n<p>undo log \u548c redo log \u8bb0\u5f55\u7269\u7406\u65e5\u5fd7\u4e0d\u4e00\u6837\uff0c\u5b83\u662f\u903b\u8f91\u65e5\u5fd7\u3002\u53ef\u4ee5\u8ba4\u4e3a\u5f53 delete \u4e00\u6761\u8bb0\u5f55\u65f6\uff0cundo log\u4e2d\u4f1a\u8bb0\u5f55\u4e00\u6761\u5bf9\u5e94\u7684insert\u8bb0\u5f55\uff0c\u53cd\u4e4b\u4ea6\u7136\uff0c\u5f53 update \u4e00\u6761\u8bb0\u5f55\u65f6\uff0c\u5b83\u8bb0\u5f55\u4e00\u6761\u5bf9\u5e94\u76f8\u53cd\u7684 update \u8bb0\u5f55\u3002\u5f53\u6267\u884c rollback \u65f6\uff0c\u5c31\u53ef\u4ee5\u4ece undo log \u4e2d\u7684\u903b\u8f91\u8bb0\u5f55\u8bfb\u53d6\u5230\u76f8\u5e94\u7684\u5185\u5bb9\u5e76\u8fdb\u884c\u56de\u6eda\u3002<\/p>\n<p>undo log \u9500\u6bc1\uff1aundo log \u5728\u4e8b\u52a1\u6267\u884c\u65f6\u4ea7\u751f\uff0c\u4e8b\u52a1\u63d0\u4ea4\u65f6\uff0c\u5e76\u4e0d\u4f1a\u7acb\u5373\u5220\u9664undol0g\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u65e5\u5fd7\u53ef\u80fd\u8fd8\u7528\u4e8e MVCC\u3002<\/p>\n<p>undo log \u5b58\u50a8\uff1aundo log \u91c7\u7528\u6bb5\u7684\u65b9\u5f0f\u8fdb\u884c\u7ba1\u7406\u548c\u8bb0\u5f55\uff0c\u5b58\u653e\u5728\u524d\u9762\u4ecb\u7ecd\u7684 rollback segment \u56de\u6eda\u6bb5\u4e2d\uff0c\u5185\u90e8\u5305\u542b1024\u4e2a undo log segment.<\/p>\n<h4>MVCC<\/h4>\n<p>\u5f53\u524d\u8bfb\uff1a<br \/>\n\u8bfb\u53d6\u7684\u662f\u8bb0\u5f55\u7684\u6700\u65b0\u7248\u672c\uff0c\u8bfb\u53d6\u65f6\u8fd8\u8981\u4fdd\u8bc1\u5176\u4ed6\u5e76\u53d1\u4e8b\u52a1\u4e0d\u80fd\u4fee\u6539\u5f53\u524d\u8bb0\u5f55\uff0c\u4f1a\u5bf9\u8bfb\u53d6\u7684\u8bb0\u5f55\u8fdb\u884c\u52a0\u9501\u3002\u5bf9\u4e8e\u6211\u4eec\u65e5\u5e38\u7684\u64cd\u4f5c\uff0c\u5982:select\u2026lock in share mode(\u5171\u4eab\u9501)\uff0cselect\u2026 for update\u3001update\u3001insert\u3001delete(\u6392\u4ed6\u9501)\u90fd\u662f\u4e00\u79cd\u5f53\u524d\u8bfb\u3002<\/p>\n<p>\u5feb\u7167\u8bfb\uff1a<br \/>\n\u7b80\u5355\u7684select(\u4e0d\u52a0\u9501)\u5c31\u662f\u5feb\u7167\u8bfb\uff0c\u5feb\u7167\u8bfb\uff0c\u8bfb\u53d6\u7684\u662f\u8bb0\u5f55\u6570\u636e\u7684\u53ef\u89c1\u7248\u672c\uff0c\u6709\u53ef\u80fd\u662f\u5386\u53f2\u6570\u636e\uff0c\u4e0d\u52a0\u9501\uff0c\u662f\u975e\u963b\u585e\u8bfb\u3002<\/p>\n<ul>\n<li>Read committed:\u6bcf\u6b21select\uff0c\u90fd\u751f\u6210\u4e00\u4e2a\u5feb\u7167\u8bfb\u3002<\/li>\n<li>Repeatable Read:\u5f00\u542f\u4e8b\u52a1\u540e\u7b2c\u4e00\u4e2aselect\u8bed\u53e5\u624d\u662f\u5feb\u7167\u8bfb\u7684\u5730\u65b9\u3002<\/li>\n<li>Serializable:\u5feb\u7167\u8bfb\u4f1a\u9000\u5316\u4e3a\u5f53\u524d\u8bfb\u3002<\/li>\n<\/ul>\n<p>MVCC\uff1a<br \/>\n\u5168\u79f0 Multi-Version Concurrency Control\uff0c\u591a\u7248\u672c\u5e76\u53d1\u63a7\u5236\u3002\u6307\u7ef4\u62a4\u4e00\u4e2a\u6570\u636e\u7684\u591a\u4e2a\u7248\u672c\uff0c\u4f7f\u5f97\u8bfb\u5199\u64cd\u4f5c\u6ca1\u6709\u51b2\u7a81\uff0c\u5feb\u7167\u8bfb\u4e3aMVSOL\u5b9e\u73b0MVCC\u63d0\u4f9b\u4e86\u4e00\u4e2a\u975e\u963b\u585e\u8bfb\u529f\u80fd\u3002MVCC\u7684\u5177\u4f53\u5b9e\u73b0\uff0c\u8fd8\u9700\u8981\u4f9d\u8d56\u4e8e\u6570\u636e\u5e93\u8bb0\u5f55\u4e2d\u7684\u4e09\u4e2a\u9690\u5f0f\u5b57\u6bb5\u3001undo log\u65e5\u5fd7\u3001read View\u3002<\/p>\n<p>\u4e09\u4e2a\u9690\u85cf\u5b57\u6bb5<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-184353-4Y.png\" alt=\"20260303-184353-4Y.png\" \/><\/p>\n<p>undo log<br \/>\n\u56de\u6eda\u65e5\u5fd7\uff0c\u5728insert\u3001update\u3001delete\u7684\u65f6\u5019\u4ea7\u751f\u7684\u4fbf\u4e8e\u6570\u636e\u56de\u6eda\u7684\u65e5\u5fd7\u3002<br \/>\n\u5f53insert\u7684\u65f6\u5019\uff0c\u4ea7\u751f\u7684undoloq\u65e5\u5fd7\u53ea\u5728\u56de\u6eda\u65f6\u9700\u8981\uff0c\u5728\u4e8b\u52a1\u63d0\u4ea4\u540e\uff0c\u53ef\u88ab\u7acb\u5373\u5220\u9664\u3002<br \/>\n\u800cupdate\u3001delete\u7684\u65f6\u5019\uff0c\u4ea7\u751f\u7684undo log\u65e5\u5fd7\u4e0d\u4ec5\u5728\u56de\u6eda\u65f6\u9700\u8981\uff0c\u5728\u5feb\u7167\u8bfb\u65f6\u4e5f\u9700\u8981\uff0c\u4e0d\u4f1a\u7acb\u5373\u88ab\u5220\u9664\u3002<\/p>\n<p>\u90a3\u4e48\u4f55\u65f6\u5220\u9664\uff1f<\/p>\n<p>\u4e8b\u52a1\u63d0\u4ea4\u540e\uff1a<br \/>\n\u5bf9\u4e8eINSERT\u64cd\u4f5c\uff0c\u4e8b\u52a1\u63d0\u4ea4\u540e\uff0cundo log\u53ef\u4ee5\u88ab\u7acb\u5373\u5220\u9664\uff0c\u56e0\u4e3a\u4e0d\u518d\u9700\u8981\u7528\u4e8e\u56de\u6eda\u3002<br \/>\n\u5bf9\u4e8eUPDATE\u548cDELETE\u64cd\u4f5c\uff0cundo log\u4e0d\u4f1a\u7acb\u5373\u88ab\u5220\u9664\uff0c\u56e0\u4e3a\u5b83\u4eec\u53ef\u80fd\u5728\u540e\u7eed\u7684\u5feb\u7167\u8bfb\u53d6\u4e2d\u88ab\u4f7f\u7528\u3002<\/p>\n<p>\u5feb\u7167\u8bfb\u53d6\u7ed3\u675f\uff1a<br \/>\n\u5f53\u6240\u6709\u4f9d\u8d56\u4e8e\u8be5undo log\u7684\u5feb\u7167\u8bfb\u53d6\u64cd\u4f5c\u7ed3\u675f\u540e\uff0cundo log\u624d\u4f1a\u88ab\u5220\u9664\u3002\u8fd9\u610f\u5473\u7740\u5982\u679c\u6709\u4e00\u4e2a\u4e8b\u52a1\u6b63\u5728\u8fdb\u884c\u5feb\u7167\u8bfb\u53d6\uff0c\u5e76\u4e14\u4f9d\u8d56\u4e8e\u67d0\u4e2aundo log\uff0c\u90a3\u4e48\u8fd9\u4e2aundo log\u4f1a\u4e00\u76f4\u4fdd\u7559\u76f4\u5230\u8be5\u4e8b\u52a1\u7ed3\u675f\u3002<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-184724-R5.png\" alt=\"20260303-184724-R5.png\" \/><\/p>\n<p>readview<br \/>\nReadView(\u8bfb\u89c6\u56fe)\u662f \u5feb\u7167\u8bfb SOL\u6267\u884c\u65f6MVCC\u63d0\u53d6\u6570\u636e\u7684\u4f9d\u636e\uff0c\u8bb0\u5f55\u5e76\u7ef4\u62a4\u7cfb\u7edf\u5f53\u524d\u6d3b\u8dc3\u7684\u4e8b\u52a1(\u672a\u63d0\u4ea4\u7684)id\u3002<\/p>\n<p>ReadView\u4e2d\u5305\u542b\u4e86\u56db\u4e2a\u6838\u5fc3\u5b57\u6bb5:<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-184801-mc.png\" alt=\"20260303-184801-mc.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-184830-h2.png\" alt=\"20260303-184830-h2.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-184824-gd.png\" alt=\"20260303-184824-gd.png\" \/><br \/>\n\u4f9d\u6b21\u6bd4\u8f83 undo log \u65e5\u5fd7\u4e2d\u7248\u672c\u6570\u636e\u94fe\uff0c\u627e\u5230\u53ef\u4ee5\u8fdb\u884c\u8bbf\u95ee\u7684\u7248\u672c\u6570\u636e\u3002<\/p>\n<h2 id=\"h2-8\">MySQL\u7ba1\u7406<\/h2>\n<h3 id=\"h3-9\">\u7cfb\u7edf\u6570\u636e\u5e93\u4ecb\u7ecd<\/h3>\n<p>Mysql\u6570\u636e\u5e93\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u81ea\u5e26\u4e86\u4e00\u4e0b\u56db\u4e2a\u6570\u636e\u5e93\uff0c\u5177\u4f53\u4f5c\u7528\u5982\u4e0b\uff1a<\/p>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-185039-oh.png\" alt=\"20260303-185039-oh.png\" \/><\/p>\n<h3 id=\"h3-10\">\u5e38\u7528\u5de5\u5177<\/h3>\n<h4>mysql<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-185130-0e.png\" alt=\"20260303-185130-0e.png\" \/><\/p>\n<h4>mysqladmin<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-185148-2U.png\" alt=\"20260303-185148-2U.png\" \/><\/p>\n<h4>mysqlbinlog<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-185309-Ay.png\" alt=\"20260303-185309-Ay.png\" \/><\/p>\n<h4>mysqlshow<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-185327-0y.png\" alt=\"20260303-185327-0y.png\" \/><\/p>\n<h4>mysqldump<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-185402-A1.png\" alt=\"20260303-185402-A1.png\" \/><\/p>\n<h4>mysqlimport\/source<\/h4>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e94)\u2014\u2014\u9501&#038;\u4e8b\u52a1\u539f\u7406-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-185422-b9.png\" alt=\"20260303-185422-b9.png\" \/><\/p>\n","excerpt":"<p>\u9501 \u9501\u662f\u8ba1\u7b97\u673a\u534f\u8c03\u591a\u4e2a\u8fdb\u7a0b\u6216\u7ebf\u7a0b\u5e76\u53d1\u8bbf\u95ee\u67d0\u4e00\u8d44\u6e90\u7684\u673a\u5236\u3002\u5728\u6570\u636e\u5e93\u4e2d\uff0c\u9664\u4f20\u7edf\u7684\u8ba1\u7b97\u8d44\u6e90(CPU\u3001RAM\u3001I\/0)\u7684\u4e89\u7528\u4ee5\u5916\uff0c\u6570\u636e\u4e5f\u662f\u4e00\u79cd\u4f9b\u8bb8\u591a\u7528\u6237\u5171\u4eab\u7684\u8d44\u6e90\u3002\u5982\u4f55\u4fdd\u8bc1\u6570\u636e\u5e76\u53d1\u8bbf\u95ee\u7684\u4e00\u81f4\u6027\u3001\u6709\u6548\u6027\u662f\u6240\u6709\u6570\u636e\u5e93\u5fc5\u987b\u89e3\u51b3\u7684\u4e00\u4e2a\u95ee\u9898\uff0c\u9501\u51b2\u7a81\u4e5f\u662f\u5f71\u54cd\u6570\u636e\u5e93\u5e76\u53d1 &#8230;<\/p>\n","date":"2026-02-28 16:49:04","modified":"2026-03-05 17:08:05","categories":[{"id":64,"slug":"mysql","title":"MySql","description":"","parent":63,"post_count":10},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":65,"slug":"mysql","title":"MySql","description":"","post_count":14},{"id":31,"slug":"%e6%95%b0%e6%8d%ae%e5%ba%93","title":"\u6570\u636e\u5e93","description":"","post_count":33}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"bpu":["1|20260305"],"views":["227"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2915,"type":"post","slug":"mysql%e8%bf%9b%e9%98%b6%e5%9b%9b-mysql%e6%97%a5%e5%bf%97","url":"https:\/\/qkongtao.cn\/?p=2915","status":"publish","title":"MySql\u8fdb\u9636(\u56db)\u2014\u2014MySQL\u65e5\u5fd7","title_plain":"MySql\u8fdb\u9636(\u56db)\u2014\u2014MySQL\u65e5\u5fd7","content":"<h2 id=\"h2-0\">MySQL\u65e5\u5fd7<\/h2>\n<h3 id=\"h3-1\">\u9519\u8bef\u65e5\u5fd7<\/h3>\n<p>\u9519\u8bef\u65e5\u5fd7\u662f MySQL \u4e2d\u6700\u91cd\u8981\u7684\u65e5\u5fd7\u4e4b\u4e00\uff0c\u5b83\u8bb0\u5f55\u4e86\u5f53 mysqld \u542f\u52a8\u548c\u505c\u6b62\u65f6\uff0c\u4ee5\u53ca\u670d\u52a1\u5668\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u53d1\u751f\u4efb\u4f55\u4e25\u91cd\u9519\u8bef\u65f6\u7684\u76f8\u5173\u4fe1\u606f\u5f53\u6570\u636e\u5e93\u51fa\u73b0\u4efb\u4f55\u6545\u969c\u5bfc\u81f4\u65e0\u6cd5\u6b63\u5e38\u4f7f\u7528\u65f6\uff0c\u5efa\u8bae\u9996\u5148\u67e5\u770b\u6b64\u65e5\u5fd7\u3002<\/p>\n<p>\u8be5\u65e5\u5fd7\u662f\u9ed8\u8ba4\u5f00\u542f\u7684\uff0c\u9ed8\u8ba4\u5b58\u653e\u76ee\u5f55 \/var\/log\/\uff0c\u9ed8\u8ba4\u7684\u65e5\u5fd7\u6587\u4ef6\u540d\u4e3a mysqld.log \u3002\u67e5\u770b\u65e5\u5fd7\u4f4d\u7f6e\uff1a<\/p>\n<pre>show variables like &#039;%log_error%&#039;<\/pre>\n<h3 id=\"h3-2\">\u4e8c\u8fdb\u5236\u65e5\u5fd7<\/h3>\n<p>\u4ecb\u7ecd\uff1a<br \/>\n\u4e8c\u8fdb\u5236\u65e5\u5fd7(BINLOG)\u8bb0\u5f55\u4e86\u6240\u6709\u7684 DDL(\u6570\u636e\u5b9a\u4e49\u8bed\u8a00)\u8bed\u53e5\u548c DML(\u6570\u636e\u64cd\u7eb5\u8bed\u8a00)\u8bed\u53e5\uff0c\u4f46\u4e0d\u5305\u62ec\u6570\u636e\u67e5\u8be2(SELECT\u3001SHOW)\u8bed\u53e5\u3002<\/p>\n<p>\u4f5c\u7528\uff1a<\/p>\n<ol>\n<li>\u707e\u96be\u65f6\u7684\u6570\u636e\u6062\u590d\uff1b<\/li>\n<li>MySQL\u7684\u4e3b\u4ece\u590d\u5236\u3002<\/li>\n<\/ol>\n<p>\u5728MySQL8\u7248\u672c\u4e2d\uff0c\u9ed8\u8ba4\u4e8c\u8fdb\u5236\u65e5\u5fd7\u662f\u5f00\u542f\u7740\u7684\uff0c\u6d89\u53ca\u5230\u7684\u53c2\u6570\u5982\u4e0b\uff1a<\/p>\n<pre>show variables like &#039;%log_bin%&#039;<\/pre>\n<p>\u65e5\u5fd7\u683c\u5f0f<br \/>\nMySQL\u670d\u52a1\u5668\u4e2d\u63d0\u4f9b\u4e86\u591a\u79cd\u683c\u5f0f\u6765\u8bb0\u5f55\u4e8c\u8fdb\u5236\u8bb0\u5f55\uff0c\u5177\u4f53\u683c\u5f0f\u53ca\u7279\u70b9\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>statement\uff1a\u57fa\u4e8eSQL\u8bed\u53e5\u7684\u65e5\u5fd7\u8bb0\u5f55\uff0c\u8bb0\u5f55\u7684\u662fSQL\u8bed\u53e5\uff0c\u5bf9\u6570\u636e\u8fdb\u884c\u4fee\u6539\u7684SQL\u90fd\u4f1a\u8bb0\u5f55\u5728\u65e5\u5fd7\u6587\u4ef6\u4e2d\u3002<\/li>\n<li>row\uff1a\u57fa\u4e8e\u884c\u7684\u65e5\u5fd7\u8bb0\u5f55\uff0c\u8bb0\u5f55\u7684\u662f\u6bcf\u4e00\u884c\u7684\u6570\u636e\u53d8\u66f4\u3002(\u9ed8\u8ba4)<\/li>\n<li>mined\uff1a\u6df7\u5408\u4e86STATEMENT\u548cROW\u4e24\u79cd\u683c\u5f0f\uff0c\u9ed8\u8ba4\u91c7\u7528STATEMENT\uff0c\u5728\u67d0\u4e9b\u7279\u6b8a\u60c5\u51b5\u4e0b\u4f1a\u81ea\u52a8\u5207\u6362\u4e3aROW\u8fdb\u884c\u8bb0\u5f55\u3002<\/li>\n<\/ol>\n<p>\u67e5\u770b\u53c2\u6570\u65b9\u5f0f\uff1ashow variables like &#039;%binlog_format%&#039;;<\/p>\n<p>\u65e5\u5fd7\u67e5\u770b<br \/>\n\u7531\u4e8e\u65e5\u5fd7\u662f\u4ee5\u4e8c\u8fdb\u5236\u65b9\u5f0f\u5b58\u50a8\u7684\uff0c\u4e0d\u80fd\u76f4\u63a5\u8bfb\u53d6\uff0c\u9700\u8981\u901a\u8fc7\u4e8c\u8fdb\u5236\u65e5\u5fd7\u67e5\u8be2\u5de5\u5177 mysqlbinlog \u6765\u67e5\u770b\uff0c\u5177\u4f53\u8bed\u6cd5\uff1a<\/p>\n<pre>mysqlbinlog[\u53c2\u6570\u9009\u9879]logfilename\n\n\u53c2\u6570\u9009\u9879\uff1a\n    -d    \u6307\u5b9a\u6570\u636e\u5e93\u540d\u79f0\uff0c\u53ea\u5217\u51fa\u6307\u5b9a\u7684\u6570\u636e\u5e93\u76f8\u5173\u7684\u64cd\u4f5c\u3002\n    -o    \u5ffd\u7565\u6389\u65e5\u5fd7\u4e2d\u7684\u524dn\u884c\u547d\u4ee4\u3002\n    -v    \u5c06\u884c\u4e8b\u4ef6(\u6570\u636e\u53d8\u66f4)\u91cd\u6784\u4e3aSOL\u8bed\u53e5\u3002\n    -w    \u5c06\u884c\u4e8b\u4ef6(\u6570\u636e\u53d8\u66f4)\u91cd\u6784\u4e3aSQL\u8bed\u53e5\uff0c\u5e76\u8f93\u51fa\u6ce8\u91ca\u4fe1\u606f<\/pre>\n<p>\u65e5\u5fd7\u5220\u9664<br \/>\n\u5bf9\u4e8e\u6bd4\u8f83\u7e41\u5fd9\u7684\u4e1a\u52a1\u7cfb\u7edf\uff0c\u6bcf\u5929\u751f\u6210\u7684binlog\u6570\u636e\u5de8\u5927\uff0c\u5982\u679c\u957f\u65f6\u95f4\u4e0d\u6e05\u9664\uff0c\u5c06\u4f1a\u5360\u7528\u5927\u91cf\u78c1\u76d8\u7a7a\u95f4\u3002\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u51e0\u79cd\u65b9\u5f0f\u6e05\u7406\u65e5\u5fd7\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u56db)\u2014\u2014MySQL\u65e5\u5fd7-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u56db)\u2014\u2014MySQL\u65e5\u5fd7-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-231741-3l.png\" alt=\"20260303-231741-3l.png\" \/><\/p>\n<p>\u4e5f\u53ef\u4ee5\u5728mysql\u7684\u914d\u7f6e\u6587\u4ef6\u4e2d\u914d\u7f6e\u4e8c\u8fdb\u5236\u65e5\u5fd7\u7684\u8fc7\u671f\u65f6\u95f4\uff0c\u8bbe\u7f6e\u4e86\u4e4b\u540e\uff0c\u4e8c\u8fdb\u5236\u65e5\u5fd7\u8fc7\u671f\u4f1a\u81ea\u52a8\u5220\u9664.<\/p>\n<pre>show variables like &#039;%binlog_expire_logs_seconds%&#039;<\/pre>\n<h3 id=\"h3-3\">\u67e5\u8be2\u65e5\u5fd7<\/h3>\n<p>\u67e5\u8be2\u65e5\u5fd7\u4e2d\u8bb0\u5f55\u4e86\u5ba2\u6237\u7aef\u7684\u6240\u6709\u64cd\u4f5c\u8bed\u53e5\uff0c\u800c\u4e8c\u8fdb\u5236\u65e5\u5fd7\u4e0d\u5305\u542b\u67e5\u8be2\u6570\u636e\u7684SQL\u8bed\u53e5\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u67e5\u8be2\u65e5\u5fd7\u662f\u672a\u5f00\u542f\u7684\u3002\u5982\u679c\u9700\u8981\u5f00\u542f\u67e5\u8be2\u65e5\u5fd7\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e0b\u914d\u7f6e\uff1a<\/p>\n<p>\u4fee\u6539MySQL\u7684\u914d\u7f6e\u6587\u4ef6 \/etc\/my.cnf \u6587\u4ef6\uff0c\u6dfb\u52a0\u5982\u4e0b\u5185\u5bb9\uff1a<\/p>\n<pre>#\u8be5\u9009\u9879\u7528\u6765\u5f00\u542f\u67e5\u8be2\u65e5\u5fd7\uff0c\u53ef\u9009\u503c\uff1a0\u6216\u80051\uff1b0\u4ee3\u8868\u5173\u95ed\uff0c1\u4ee3\u8868\u5f00\u542f\ngeneral_log=1\n#\u8bbe\u7f6e\u65e5\u5fd7\u7684\u6587\u4ef6\u540d \uff0c \u5982\u679c\u6ca1\u6709\u6307\u5b9a\uff0c\u9ed8\u8ba4\u7684\u6587\u4ef6\u540d\u4e3a host_name.log\ngeneral_log_file=mysql_query.log<\/pre>\n<h3 id=\"h3-4\">\u6162\u67e5\u8be2\u65e5\u5fd7<\/h3>\n<p>\u6162\u67e5\u8be2\u65e5\u5fd7\u8bb0\u5f55\u4e86\u6240\u6709\u6267\u884c\u65f6\u95f4\u8d85\u8fc7\u53c2\u6570 long_query_time \u8bbe\u7f6e\u503c\u5e76\u4e14\u626b\u63cf\u8bb0\u5f55\u6570\u4e0d\u5c0f\u4e8e min_examined_row_limit\u7684\u6240\u6709\u7684SQL\u8bed\u53e5\u7684\u65e5\u5fd7\uff0c\u9ed8\u8ba4\u672a\u5f00\u542f\u3002long_query_time \u9ed8\u8ba4\u4e3a 10 \u79d2\uff0c\u6700\u5c0f\u4e3a0\uff0c\u7cbe\u5ea6\u53ef\u4ee5\u5230\u5fae\u79d2\u3002<\/p>\n<pre>#\u6162\u67e5\u8be2\u65e5\u5fd7\nslow_query_log=1\n#\u6267\u884c\u65f6\u95f4\u53c2\u6570\nlong_query_time=2<\/pre>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e0d\u4f1a\u8bb0\u5f55\u7ba1\u7406\u8bed\u53e5\uff0c\u4e5f\u4e0d\u4f1a\u8bb0\u5f55\u4e0d\u4f7f\u7528\u7d22\u5f15\u8fdb\u884c\u67e5\u627e\u7684\u67e5\u8be2\u3002\u53ef\u4ee5\u4f7f\u7528log_slow_admin_statements\u548c\u66f4\u6539\u6b64\u884c\u4e3alog_queries_not_using_indexes\uff0c\u5982\u4e0b\u6240\u8ff0\u3002<\/p>\n<pre>#\u8bb0\u5f55\u6267\u884c\u8f83\u6162\u7684\u7ba1\u7406\u8bed\u53e5\nlog_slow_admin_statements = 1\n#\u8bb0\u5f55\u6267\u884c\u8f83\u6162\u7684\u672a\u4f7f\u7528\u7d22\u5f15\u7684\u8bed\u53e5\nlog_queries_not_using_indexes = 1<\/pre>\n","excerpt":"<p>MySQL\u65e5\u5fd7 \u9519\u8bef\u65e5\u5fd7 \u9519\u8bef\u65e5\u5fd7\u662f MySQL \u4e2d\u6700\u91cd\u8981\u7684\u65e5\u5fd7\u4e4b\u4e00\uff0c\u5b83\u8bb0\u5f55\u4e86\u5f53 mysqld \u542f\u52a8\u548c\u505c\u6b62\u65f6\uff0c\u4ee5\u53ca\u670d\u52a1\u5668\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u53d1\u751f\u4efb\u4f55\u4e25\u91cd\u9519\u8bef\u65f6\u7684\u76f8\u5173\u4fe1\u606f\u5f53\u6570\u636e\u5e93\u51fa\u73b0\u4efb\u4f55\u6545\u969c\u5bfc\u81f4\u65e0\u6cd5\u6b63\u5e38\u4f7f\u7528\u65f6\uff0c\u5efa\u8bae\u9996\u5148\u67e5\u770b\u6b64\u65e5\u5fd7\u3002 \u8be5\u65e5\u5fd7\u662f\u9ed8\u8ba4\u5f00\u542f\u7684\uff0c\u9ed8\u8ba4\u5b58\u653e\u76ee\u5f55 \/var &#8230;<\/p>\n","date":"2026-02-28 16:45:01","modified":"2026-03-05 17:07:55","categories":[{"id":64,"slug":"mysql","title":"MySql","description":"","parent":63,"post_count":10},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":65,"slug":"mysql","title":"MySql","description":"","post_count":14},{"id":31,"slug":"%e6%95%b0%e6%8d%ae%e5%ba%93","title":"\u6570\u636e\u5e93","description":"","post_count":33}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"bpu":["1|20260305"],"views":["204"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2913,"type":"post","slug":"mysql%e8%bf%9b%e9%98%b6%e4%b8%89-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8eexplain%e8%af%a6%e8%a7%a3","url":"https:\/\/qkongtao.cn\/?p=2913","status":"publish","title":"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3","title_plain":"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3","content":"<h2 id=\"h2-0\">\u5b58\u50a8\u5f15\u64ce<\/h2>\n<p>MySQL\u4f53\u7cfb\u7ed3\u6784\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-110734-wq.png\" alt=\"20260303-110734-wq.png\" \/><br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-110750-77.png\" alt=\"20260303-110750-77.png\" \/><\/p>\n<p>\u5b58\u50a8\u5f15\u64ce\u5c31\u662f\u5b58\u50a8\u6570\u636e\u3001\u5efa\u7acb\u7d22\u5f15\u3001\u66f4\u65b0\/\u67e5\u8be2\u6570\u636e\u7b49\u6280\u672f\u7684\u5b9e\u73b0\u65b9\u5f0f\u3002\u5b58\u50a8\u5f15\u64ce\u662f\u57fa\u4e8e\u8868\u800c\u4e0d\u662f\u57fa\u4e8e\u5e93\u7684\uff0c\u6240\u4ee5\u5b58\u50a8\u5f15\u64ce\u4e5f\u53ef\u4ee5\u88ab\u79f0\u4e3a\u8868\u5f15\u64ce\u3002<br \/>\n\u9ed8\u8ba4\u5b58\u50a8\u5f15\u64ce\u662fInnoDB\u3002<\/p>\n<p>\u76f8\u5173\u64cd\u4f5c\uff1a<\/p>\n<pre>-- \u67e5\u8be2\u5efa\u8868\u8bed\u53e5\nshow create table account;\n-- \u5efa\u8868\u65f6\u6307\u5b9a\u5b58\u50a8\u5f15\u64ce\nCREATE TABLE \u8868\u540d(\n    ...\n) ENGINE=INNODB;\n-- \u67e5\u770b\u5f53\u524d\u6570\u636e\u5e93\u652f\u6301\u7684\u5b58\u50a8\u5f15\u64ce\nshow engines;<\/pre>\n<h3 id=\"h3-1\">InnoDB<\/h3>\n<p>InnoDB \u662f\u4e00\u79cd\u517c\u987e\u9ad8\u53ef\u9760\u6027\u548c\u9ad8\u6027\u80fd\u7684\u901a\u7528\u5b58\u50a8\u5f15\u64ce\uff0c\u5728 MySQL 5.5 \u4e4b\u540e\uff0cInnoDB \u662f\u9ed8\u8ba4\u7684 MySQL \u5f15\u64ce<\/p>\n<p>\u7279\u70b9\uff1a<\/p>\n<ul>\n<li>DML \u64cd\u4f5c\u9075\u5faa ACID \u6a21\u578b\uff0c\u652f\u6301\u4e8b\u52a1<\/li>\n<li>\u884c\u7ea7\u9501\uff0c\u63d0\u9ad8\u5e76\u53d1\u8bbf\u95ee\u6027\u80fd<\/li>\n<li>\u652f\u6301\u5916\u952e\u7ea6\u675f\uff0c\u4fdd\u8bc1\u6570\u636e\u7684\u5b8c\u6574\u6027\u548c\u6b63\u786e\u6027<\/li>\n<\/ul>\n<p>\u6587\u4ef6\uff1a<br \/>\nxxx.ibd: xxx\u4ee3\u8868\u8868\u540d\uff0cInnoDB \u5f15\u64ce\u7684\u6bcf\u5f20\u8868\u90fd\u4f1a\u5bf9\u5e94\u8fd9\u6837\u4e00\u4e2a\u8868\u7a7a\u95f4\u6587\u4ef6\uff0c\u5b58\u50a8\u8be5\u8868\u7684\u8868\u7ed3\u6784\uff08frm\u3001sdi\uff09\u3001\u6570\u636e\u548c\u7d22\u5f15\u3002<br \/>\n\u53c2\u6570\uff1ainnodb_file_per_table\uff0c\u51b3\u5b9a\u591a\u5f20\u8868\u5171\u4eab\u4e00\u4e2a\u8868\u7a7a\u95f4\u8fd8\u662f\u6bcf\u5f20\u8868\u5bf9\u5e94\u4e00\u4e2a\u8868\u7a7a\u95f4<\/p>\n<p>\u77e5\u8bc6\u70b9\uff1a<\/p>\n<p>\u67e5\u770b Mysql \u53d8\u91cf\uff1a<br \/>\nshow variables like 'innodb_file_per_table';<\/p>\n<p>\u4eceidb\u6587\u4ef6\u63d0\u53d6\u8868\u7ed3\u6784\u6570\u636e\uff1a\uff08\u5728cmd\u8fd0\u884c\uff09<br \/>\nibd2sdi xxx.ibd<\/p>\n<p>InnoDB \u903b\u8f91\u5b58\u50a8\u7ed3\u6784\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-111046-Pe.png\" alt=\"20260303-111046-Pe.png\" \/><\/p>\n<h3 id=\"h3-2\">MyISAM<\/h3>\n<p>MyISAM \u662f MySQL \u65e9\u671f\u7684\u9ed8\u8ba4\u5b58\u50a8\u5f15\u64ce\u3002<\/p>\n<p>\u7279\u70b9\uff1a<\/p>\n<ul>\n<li>\u4e0d\u652f\u6301\u4e8b\u52a1\uff0c\u4e0d\u652f\u6301\u5916\u952e<\/li>\n<li>\u652f\u6301\u8868\u9501\uff0c\u4e0d\u652f\u6301\u884c\u9501<\/li>\n<li>\u8bbf\u95ee\u901f\u5ea6\u5feb<\/li>\n<\/ul>\n<p>\u6587\u4ef6\uff1a<\/p>\n<ul>\n<li>xxx.sdi: \u5b58\u50a8\u8868\u7ed3\u6784\u4fe1\u606f<\/li>\n<li>xxx.MYD: \u5b58\u50a8\u6570\u636e<\/li>\n<li>xxx.MYI: \u5b58\u50a8\u7d22\u5f15<\/li>\n<\/ul>\n<h3 id=\"h3-3\">Memory<\/h3>\n<p>Memory \u5f15\u64ce\u7684\u8868\u6570\u636e\u662f\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u7684\uff0c\u53d7\u786c\u4ef6\u95ee\u9898\u3001\u65ad\u7535\u95ee\u9898\u7684\u5f71\u54cd\uff0c\u53ea\u80fd\u5c06\u8fd9\u4e9b\u8868\u4f5c\u4e3a\u4e34\u65f6\u8868\u6216\u7f13\u5b58\u4f7f\u7528\u3002<\/p>\n<p>\u7279\u70b9\uff1a<\/p>\n<ul>\n<li>\u5b58\u653e\u5728\u5185\u5b58\u4e2d\uff0c\u901f\u5ea6\u5feb<\/li>\n<li>hash\u7d22\u5f15\uff08\u9ed8\u8ba4\uff09<\/li>\n<\/ul>\n<p>\u6587\u4ef6\uff1a<br \/>\nxxx.sdi: \u5b58\u50a8\u8868\u7ed3\u6784\u4fe1\u606f<\/p>\n<h3 id=\"h3-4\">\u5b58\u50a8\u5f15\u64ce\u7279\u70b9<\/h3>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-111249-nz.png\" alt=\"20260303-111249-nz.png\" \/><\/p>\n<h3 id=\"h3-5\">\u5b58\u50a8\u5f15\u64ce\u7684\u9009\u62e9<\/h3>\n<p>\u5728\u9009\u62e9\u5b58\u50a8\u5f15\u64ce\u65f6\uff0c\u5e94\u8be5\u6839\u636e\u5e94\u7528\u7cfb\u7edf\u7684\u7279\u70b9\u9009\u62e9\u5408\u9002\u7684\u5b58\u50a8\u5f15\u64ce\u3002\u5bf9\u4e8e\u590d\u6742\u7684\u5e94\u7528\u7cfb\u7edf\uff0c\u8fd8\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u9009\u62e9\u591a\u79cd\u5b58\u50a8\u5f15\u64ce\u8fdb\u884c\u7ec4\u5408\u3002<\/p>\n<ul>\n<li>\n<p>InnoDB: \u5982\u679c\u5e94\u7528\u5bf9\u4e8b\u7269\u7684\u5b8c\u6574\u6027\u6709\u6bd4\u8f83\u9ad8\u7684\u8981\u6c42\uff0c\u5728\u5e76\u53d1\u6761\u4ef6\u4e0b\u8981\u6c42\u6570\u636e\u7684\u4e00\u81f4\u6027\uff0c\u6570\u636e\u64cd\u4f5c\u9664\u4e86\u63d2\u5165\u548c\u67e5\u8be2\u4e4b\u5916\uff0c\u8fd8\u5305\u542b\u5f88\u591a\u7684\u66f4\u65b0\u3001\u5220\u9664\u64cd\u4f5c\uff0c\u5219 InnoDB \u662f\u6bd4\u8f83\u5408\u9002\u7684\u9009\u62e9<\/p>\n<\/li>\n<li>\n<p>MyISAM: \u5982\u679c\u5e94\u7528\u662f\u4ee5\u8bfb\u64cd\u4f5c\u548c\u63d2\u5165\u64cd\u4f5c\u4e3a\u4e3b\uff0c\u53ea\u6709\u5f88\u5c11\u7684\u66f4\u65b0\u548c\u5220\u9664\u64cd\u4f5c\uff0c\u5e76\u4e14\u5bf9\u4e8b\u52a1\u7684\u5b8c\u6574\u6027\u3001\u5e76\u53d1\u6027\u8981\u6c42\u4e0d\u9ad8\uff0c\u90a3\u8fd9\u4e2a\u5b58\u50a8\u5f15\u64ce\u662f\u975e\u5e38\u5408\u9002\u7684\u3002<\/p>\n<\/li>\n<li>\n<p>Memory: \u5c06\u6240\u6709\u6570\u636e\u4fdd\u5b58\u5728\u5185\u5b58\u4e2d\uff0c\u8bbf\u95ee\u901f\u5ea6\u5feb\uff0c\u901a\u5e38\u7528\u4e8e\u4e34\u65f6\u8868\u53ca\u7f13\u5b58\u3002Memory \u7684\u7f3a\u9677\u662f\u5bf9\u8868\u7684\u5927\u5c0f\u6709\u9650\u5236\uff0c\u592a\u5927\u7684\u8868\u65e0\u6cd5\u7f13\u5b58\u5728\u5185\u5b58\u4e2d\uff0c\u800c\u4e14\u65e0\u6cd5\u4fdd\u969c\u6570\u636e\u7684\u5b89\u5168\u6027<\/p>\n<\/li>\n<\/ul>\n<p>\u7535\u5546\u4e2d\u7684\u8db3\u8ff9\u548c\u8bc4\u8bba\u9002\u5408\u4f7f\u7528 MyISAM \u5f15\u64ce\uff0c\u7f13\u5b58\u9002\u5408\u4f7f\u7528 Memory \u5f15\u64ce\u3002<\/p>\n<h2 id=\"h2-6\">EXPLAIN\u6027\u80fd\u5206\u6790<\/h2>\n<p>\u53c2\u8003\u4e0a\u4e00\u7bc7\u535a\u5ba2\uff1a<a href=\"https:\/\/qkongtao.cn\/?p=2851\">https:\/\/qkongtao.cn\/?p=2851<\/a><\/p>\n<h3 id=\"h3-7\">explain<\/h3>\n<p>EXPLAIN \u662f MySQL \u4e2d\u7528\u4e8e\u5206\u6790 SQL \u67e5\u8be2\u6267\u884c\u8ba1\u5212\u7684\u91cd\u8981\u5de5\u5177\uff0c\u901a\u8fc7\u5b83\u53ef\u4ee5\u67e5\u770b\u67e5\u8be2\u5982\u4f55\u4f7f\u7528\u7d22\u5f15\u3001\u626b\u63cf\u6570\u636e\u7684\u65b9\u5f0f\u4ee5\u53ca\u8868\u4e4b\u95f4\u7684\u8fde\u63a5\u987a\u5e8f\u7b49\u4fe1\u606f\u3002\u4ee5\u4e0b\u662f EXPLAIN \u8f93\u51fa\u5404\u5b57\u6bb5\u7684\u8be6\u7ec6\u89e3\u91ca\uff1a<\/p>\n<h3 id=\"h3-8\">EXPLAIN \u57fa\u672c\u8bed\u6cd5<\/h3>\n<pre>EXPLAIN SELECT * FROM users WHERE age &gt; 18;<\/pre>\n<p>\u8f93\u51fa\u7ed3\u679c\u5305\u542b\u4ee5\u4e0b\u6838\u5fc3\u5b57\u6bb5\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-112219-05.png\" alt=\"20260303-112219-05.png\" \/><\/p>\n<h3 id=\"h3-9\">EXPLAIN\u5404\u5b57\u6bb5\u8be6\u7ec6\u89e3\u91ca<\/h3>\n<p>1\u3001id\uff08\u67e5\u8be2\u6807\u8bc6\u7b26\uff09<br \/>\n\u542b\u4e49\uff1a\u67e5\u8be2\u7684\u552f\u4e00\u6807\u8bc6\u7b26\uff0c\u6807\u8bc6 SQL \u8bed\u53e5\u7684\u6267\u884c\u987a\u5e8f\u3002<\/p>\n<p>\u89c4\u5219\uff1a<\/p>\n<ul>\n<li>id \u76f8\u540c\uff1a\u6309\u8868\u7684\u8bfb\u53d6\u987a\u5e8f\u6267\u884c\uff08\u4ece\u4e0a\u5230\u4e0b\uff09\u3002<\/li>\n<li>id \u4e0d\u540c\uff1aid \u503c\u8d8a\u5927\u8d8a\u5148\u6267\u884c\uff08\u5982\u5b50\u67e5\u8be2\u7684 id \u901a\u5e38\u66f4\u5927\uff09\u3002<\/li>\n<li>id \u4e3a NULL\uff1a\u8868\u793a\u6c47\u603b\u64cd\u4f5c\uff08\u5982UNION\u7684\u7ed3\u679c\u5408\u5e76\uff09\u3002<\/li>\n<\/ul>\n<p>2\u3001select_type\uff08\u67e5\u8be2\u7c7b\u578b\uff09<br \/>\n\u5e38\u89c1\u53d6\u503c\uff1a<\/p>\n<ul>\n<li>SIMPLE\uff1a\u7b80\u5355\u67e5\u8be2\uff08\u4e0d\u5305\u542b\u5b50\u67e5\u8be2\u6216 UNION\uff09\u3002<\/li>\n<li>PRIMARY\uff1a\u4e3b\u67e5\u8be2\uff08\u5305\u542b\u5b50\u67e5\u8be2\u65f6\uff0c\u6700\u5916\u5c42\u67e5\u8be2\uff09\u3002<\/li>\n<li>SUBQUERY\uff1a\u5b50\u67e5\u8be2\uff08\u5d4c\u5957\u5728 SELECT\u3001WHERE \u6216 FROM \u4e2d\u7684\u67e5\u8be2\uff09\u3002<\/li>\n<li>DERIVED\uff1a\u6d3e\u751f\u8868\uff08FROM \u5b50\u53e5\u4e2d\u7684\u5b50\u67e5\u8be2\uff0cMySQL \u4f1a\u5c06\u5176\u7ed3\u679c\u5b58\u5165\u4e34\u65f6\u8868\uff09\u3002<\/li>\n<li>UNION\uff1aUNION \u64cd\u4f5c\u7684\u7b2c\u4e8c\u4e2a\u53ca\u540e\u7eed\u67e5\u8be2\u3002<\/li>\n<li>UNION RESULT\uff1aUNION \u7ed3\u679c\u7684\u5408\u5e76\u64cd\u4f5c\u3002<\/li>\n<\/ul>\n<p>3\u3001table\uff08\u8868\u540d\uff09<br \/>\n\u542b\u4e49\uff1a\u5f53\u524d\u6267\u884c\u7684\u8868\u540d\uff08\u53ef\u80fd\u662f\u5b9e\u9645\u8868\u540d\u6216\u522b\u540d\uff0c\u6d3e\u751f\u8868\u663e\u793a\u4e3a<derivedN>\uff0cN \u4e3a id \u503c\uff09\u3002<\/p>\n<p>4\u3001partitions\uff08\u5206\u533a\u4fe1\u606f\uff09<br \/>\n\u542b\u4e49\uff1a\u67e5\u8be2\u5339\u914d\u7684\u5206\u533a\uff08\u4ec5\u5bf9\u5206\u533a\u8868\u6709\u6548\uff0c\u5426\u5219\u4e3a NULL\uff09\u3002<\/p>\n<p>5\u3001type\uff08\u8fde\u63a5\u7c7b\u578b\uff0c\u91cd\u8981\uff01\uff09<br \/>\n\u542b\u4e49\uff1a\u8868\u793a\u8868\u7684\u8bbf\u95ee\u65b9\u5f0f\uff0c\u53cd\u6620\u67e5\u8be2\u6548\u7387\uff08\u4ece\u6700\u4f18\u5230\u6700\u5dee\u6392\u5e8f\uff09\uff1a<\/p>\n<ul>\n<li>system\uff1a\u8868\u4e2d\u53ea\u6709\u4e00\u884c\u6570\u636e\uff08\u7cfb\u7edf\u8868\uff0c\u5982information_schema\uff09\u3002<\/li>\n<li>const\uff1a\u901a\u8fc7\u7d22\u5f15\u4e00\u6b21\u5339\u914d\u4e00\u884c\u6570\u636e\uff08\u5982WHERE id = 1\uff09\u3002<\/li>\n<li>eq_ref\uff1a\u552f\u4e00\u6027\u7d22\u5f15\u626b\u63cf\uff0c\u6bcf\u884c\u4ec5\u5339\u914d\u4e00\u6761\u8bb0\u5f55\uff08\u5e38\u89c1\u4e8eJOIN\u64cd\u4f5c\uff0c\u5982ON t1.id = t2.id\uff09\u3002<\/li>\n<li>ref\uff1a\u975e\u552f\u4e00\u6027\u7d22\u5f15\u626b\u63cf\uff0c\u8fd4\u56de\u5339\u914d\u67d0\u4e2a\u503c\u7684\u6240\u6709\u884c\uff08\u5982WHERE name = 'Alice'\uff09\u3002<\/li>\n<li>range\uff1a\u7d22\u5f15\u8303\u56f4\u626b\u63cf\uff08\u5982WHERE id BETWEEN 1 AND 10\u6216WHERE age &gt; 18\uff09\u3002<\/li>\n<li>index\uff1a\u5168\u7d22\u5f15\u626b\u63cf\uff08\u904d\u5386\u6574\u4e2a\u7d22\u5f15\u6811\uff0c\u5982SELECT id FROM users\uff0cid \u662f\u7d22\u5f15\uff09\u3002<\/li>\n<li>ALL\uff1a\u5168\u8868\u626b\u63cf\uff08\u672a\u4f7f\u7528\u7d22\u5f15\uff0c\u6027\u80fd\u6700\u5dee\uff09\u3002<\/li>\n<\/ul>\n<p>6\u3001possible_keys\uff08\u53ef\u80fd\u4f7f\u7528\u7684\u7d22\u5f15\uff09<br \/>\n\u542b\u4e49\uff1aMySQL \u8ba4\u4e3a\u53ef\u80fd\u7528\u4e8e\u4f18\u5316\u67e5\u8be2\u7684\u7d22\u5f15\u3002<br \/>\n\u6ce8\u610f\uff1a\u53ef\u80fd\u5b58\u5728\u591a\u4e2a\u7d22\u5f15\uff0c\u4f46\u5b9e\u9645\u4e0d\u4e00\u5b9a\u4f7f\u7528\uff08\u9700\u7ed3\u5408key\u5b57\u6bb5\u5224\u65ad\uff09\u3002<\/p>\n<p>7\u3001key\uff08\u5b9e\u9645\u4f7f\u7528\u7684\u7d22\u5f15\uff09<br \/>\n\u542b\u4e49\uff1aMySQL \u5b9e\u9645\u9009\u62e9\u7684\u7d22\u5f15\u3002<br \/>\n\u82e5\u4e3a NULL\uff1a\u8868\u793a\u672a\u4f7f\u7528\u7d22\u5f15\uff08\u5982type=ALL\uff09\u3002<\/p>\n<p>8\u3001key_len\uff08\u7d22\u5f15\u4f7f\u7528\u7684\u5b57\u8282\u6570\uff09<br \/>\n\u542b\u4e49\uff1a\u8868\u793a\u7d22\u5f15\u4e2d\u4f7f\u7528\u7684\u5b57\u8282\u6570\uff0c\u53ef\u8bc4\u4f30\u7d22\u5f15\u7684\u7cbe\u786e\u7a0b\u5ea6\uff08\u503c\u8d8a\u5c0f\u8d8a\u7cbe\u786e\uff09\u3002<br \/>\n\u8ba1\u7b97\u793a\u4f8b\uff1a<br \/>\n\u5bf9\u4e8eVARCHAR(200) UTF8\u7c7b\u578b\uff0ckey_len = 200 * 3 + 2 = 602\uff083 \u5b57\u8282 \/ \u5b57\u7b26 + 2 \u5b57\u8282\u957f\u5ea6\u524d\u7f00\uff09\u3002<br \/>\n\u82e5\u7d22\u5f15\u5305\u542bNULL\u5217\uff0c\u9700\u989d\u5916\u52a0 1 \u5b57\u8282\u3002<\/p>\n<p>9\u3001ref\uff08\u54ea\u4e9b\u5217\u6216\u5e38\u91cf\u4e0e\u7d22\u5f15\u6bd4\u8f83\uff09<br \/>\n\u542b\u4e49\uff1a\u663e\u793a\u54ea\u4e9b\u5b57\u6bb5\u6216\u5e38\u91cf\u88ab\u7528\u4e8e\u67e5\u627e\u7d22\u5f15\u5217\u4e0a\u7684\u503c\u3002<br \/>\n\u5e38\u89c1\u53d6\u503c\uff1a<br \/>\nconst\uff1a\u5e38\u91cf\u503c\uff08\u5982WHERE id = 1\uff09\u3002<br \/>\n\u8868\u540d\u3002\u5217\u540d\uff1a\u5176\u4ed6\u8868\u7684\u5217\uff08\u5982JOIN\u64cd\u4f5c\u4e2d\u4f7f\u7528\u7684\u5217\uff09\u3002<\/p>\n<p>10\u3001rows\uff08\u9884\u4f30\u626b\u63cf\u7684\u884c\u6570\uff09<br \/>\n\u542b\u4e49\uff1aMySQL \u4f30\u8ba1\u6267\u884c\u67e5\u8be2\u9700\u8981\u626b\u63cf\u7684\u884c\u6570\uff08\u975e\u7cbe\u786e\u503c\uff0c\u57fa\u4e8e\u7edf\u8ba1\u4fe1\u606f\uff09\u3002<br \/>\n\u610f\u4e49\uff1a\u503c\u8d8a\u5c0f\uff0c\u67e5\u8be2\u6548\u7387\u8d8a\u9ad8\u3002<\/p>\n<p>11\u3001filtered\uff08\u8fc7\u6ee4\u540e\u7684\u884c\u767e\u5206\u6bd4\uff09<br \/>\n\u542b\u4e49\uff1a\u8868\u793arows\u7ecf\u8fc7\u8fc7\u6ee4\u540e\u5269\u4f59\u7684\u6bd4\u4f8b\uff08\u598250.00%\u8868\u793a\u7ea6\u4e00\u534a\u6570\u636e\u88ab\u8fc7\u6ee4\uff09\u3002<br \/>\n\u8ba1\u7b97\u516c\u5f0f\uff1a\u6700\u7ec8\u7ed3\u679c\u884c\u6570 = rows * filtered \/ 100\u3002<\/p>\n<p>12\u3001Extra\uff08\u989d\u5916\u4fe1\u606f\uff0c\u91cd\u8981\uff01\uff09<br \/>\n\u542b\u4e49\uff1a\u5305\u542b\u67e5\u8be2\u6267\u884c\u7684\u989d\u5916\u7ec6\u8282\uff0c\u5e38\u89c1\u53d6\u503c\u53ca\u4f18\u5316\u5efa\u8bae\uff1a<\/p>\n<ul>\n<li>Using filesort\uff1a\u9700\u989d\u5916\u6392\u5e8f\uff08\u5982ORDER BY\u672a\u4f7f\u7528\u7d22\u5f15\uff09\uff0c\u6027\u80fd\u8f83\u5dee\u3002<br \/>\n\u4f18\u5316\u5efa\u8bae\uff1a\u5bf9ORDER BY\u5b57\u6bb5\u6dfb\u52a0\u7d22\u5f15\u3002<\/li>\n<li>Using temporary\uff1a\u4f7f\u7528\u4e34\u65f6\u8868\uff08\u5982GROUP BY\u6216UNION\u64cd\u4f5c\uff09\uff0c\u6027\u80fd\u5f00\u9500\u5927\u3002<br \/>\n\u4f18\u5316\u5efa\u8bae\uff1a\u907f\u514d\u590d\u6742\u7684GROUP BY\u6216\u6539\u7528INDEX\u8986\u76d6\u7d22\u5f15\u3002<\/li>\n<li>Using index\uff1a\u4f7f\u7528\u8986\u76d6\u7d22\u5f15\uff08\u67e5\u8be2\u7684\u5217\u76f4\u63a5\u4ece\u7d22\u5f15\u4e2d\u83b7\u53d6\uff0c\u65e0\u9700\u56de\u8868\uff09\uff0c\u6027\u80fd\u6700\u4f18\u3002<\/li>\n<li>Using where\uff1a\u4f7f\u7528WHERE\u5b50\u53e5\u8fc7\u6ee4\u6570\u636e\u3002<\/li>\n<li>Using join buffer\uff1a\u4f7f\u7528\u8fde\u63a5\u7f13\u51b2\u533a\uff08\u672a\u4f7f\u7528\u7d22\u5f15\u7684\u8868\u8fde\u63a5\uff09\u3002<br \/>\n\u4f18\u5316\u5efa\u8bae\uff1a\u4e3aJOIN\u6761\u4ef6\u6dfb\u52a0\u7d22\u5f15\u3002<\/li>\n<\/ul>\n<h3 id=\"h3-10\">\u8986\u76d6\u7d22\u5f15\uff1a\u907f\u514d\u56de\u8868\u7684\u6027\u80fd\u63d0\u5347<\/h3>\n<ol>\n<li>\n<p>\u4ec0\u4e48\u662f\u8986\u76d6\u7d22\u5f15\uff1f<br \/>\n\u8986\u76d6\u7d22\u5f15\u662f\u6307\u4e00\u4e2a\u7d22\u5f15\u5305\u542b\u4e86\u67e5\u8be2\u6240\u9700\u7684\u6240\u6709\u5b57\u6bb5\uff0cMySQL\u53ef\u4ee5\u76f4\u63a5\u4ece\u7d22\u5f15\u4e2d\u83b7\u53d6\u9700\u8981\u7684\u6570\u636e\uff0c\u800c\u65e0\u9700\u56de\u8868\u67e5\u8be2\u6570\u636e\u884c\u3002\u8fd9\u5c31\u50cf\u662f\u4e00\u672c\u6559\u79d1\u4e66\uff0c\u5982\u679c\u76ee\u5f55\u5df2\u7ecf\u5305\u542b\u4e86\u4f60\u8981\u627e\u7684\u5168\u90e8\u4fe1\u606f\uff0c\u5c31\u4e0d\u9700\u8981\u7ffb\u5230\u6b63\u6587\u9875\u9762\u4e86\u3002<\/p>\n<\/li>\n<li>\n<p>\u8986\u76d6\u7d22\u5f15\u7684\u4f18\u52bf<\/p>\n<\/li>\n<\/ol>\n<ul>\n<li>\u51cf\u5c11IO\u64cd\u4f5c\uff1a\u907f\u514d\u56de\u8868\u64cd\u4f5c\uff0c\u51cf\u5c11\u78c1\u76d8IO<\/li>\n<li>\u63d0\u5347\u67e5\u8be2\u901f\u5ea6\uff1a\u7d22\u5f15\u6570\u636e\u901a\u5e38\u6bd4\u884c\u6570\u636e\u5c0f\uff0c\u4e14\u66f4\u53ef\u80fd\u7f13\u5b58\u5728\u5185\u5b58\u4e2d<\/li>\n<li>\u51cf\u5c11\u5185\u5b58\u5360\u7528\uff1a\u53ea\u9700\u8981\u52a0\u8f7d\u7d22\u5f15\u6570\u636e\uff0c\u4e0d\u9700\u8981\u52a0\u8f7d\u6574\u884c\u6570\u636e<\/li>\n<\/ul>\n<h3 id=\"h3-11\">\u5b9e\u6218\u573a\u666f\uff1a\u8ba2\u5355\u67e5\u8be2\u7684\u6027\u80fd\u4f18\u5316<\/h3>\n<p>\u5047\u8bbe\u6709\u4e00\u4e2a\u7535\u5546\u5e73\u53f0\u7684\u8ba2\u5355\u8868\uff0c\u7ed3\u6784\u5982\u4e0b\uff1a<\/p>\n<pre>CREATE TABLE `orders` (\n  `order_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,\n  `user_id` INT NOT NULL,\n  `product_id` INT NOT NULL,\n  `order_time` DATETIME NOT NULL,\n  `amount` DECIMAL(10,2) NOT NULL,\n  `status` TINYINT NOT NULL DEFAULT 0,\n  `remark` VARCHAR(200) DEFAULT NULL,\n  PRIMARY KEY (`order_id`),\n  KEY `idx_user_time` (`user_id`, `order_time`),\n  KEY `idx_product` (`product_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;<\/pre>\n<p>\u73b0\u5728\u6709\u4e00\u4e2a\u9ad8\u9891\u67e5\u8be2\uff1a\u83b7\u53d6\u67d0\u4e2a\u7528\u6237\u6700\u8fd1\u4e00\u4e2a\u6708\u7684\u8ba2\u5355\u8bb0\u5f55\uff0c\u53ea\u9700\u8981\u8ba2\u5355ID\u3001\u7528\u6237ID\u3001\u4e0b\u5355\u65f6\u95f4\u548c\u8ba2\u5355\u91d1\u989d\u3002<\/p>\n<pre>SELECT order_id, user_id, order_time, amount \nFROM orders \nWHERE user_id = 1001 \n  AND order_time &gt;= &#039;2023-05-01&#039; \n  AND order_time &lt; &#039;2023-06-01&#039;;<\/pre>\n<p>\u5b9e\u6218\u4f18\u5316\uff1a<br \/>\n\u5728\u8ba2\u5355\u8868\u4f8b\u5b50\u4e2d\uff0c\u73b0\u6709\u7d22\u5f15idx_user_time\u5305\u542b\u4e86user_id\u548corder_time\uff0c\u4f46\u67e5\u8be2\u8fd8\u9700\u8981amount\u5b57\u6bb5\u3002\u4e3a\u4e86\u4f7f\u7528\u8986\u76d6\u7d22\u5f15\uff0c\u6211\u4eec\u53ef\u4ee5\u521b\u5efa\u65b0\u7d22\u5f15\uff1a<\/p>\n<pre>ALTER TABLE orders ADD INDEX idx_user_time_amount (user_id, order_time, amount);<\/pre>\n<p>\u73b0\u5728\u6267\u884c\u540c\u6837\u7684\u67e5\u8be2\uff0c\u4f7f\u7528EXPLAIN\u5206\u6790\u6267\u884c\u8ba1\u5212\uff1a<\/p>\n<pre>EXPLAIN SELECT order_id, user_id, order_time, amount \nFROM orders \nWHERE user_id = 1001 \n  AND order_time &gt;= &#039;2023-05-01&#039; \n  AND order_time &lt; &#039;2023-06-01&#039;;<\/pre>\n<p>EXPLAIN\u7ed3\u679c\u5206\u6790\uff1a<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e09)\u2014\u2014\u5b58\u50a8\u5f15\u64ce&#038;EXPLAIN\u8be6\u89e3-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260303-113552-XJ.png\" alt=\"20260303-113552-XJ.png\" \/><\/p>\n<p>\u4eceEXPLAIN\u7ed3\u679c\u53ef\u4ee5\u770b\u5230\uff1a<\/p>\n<ul>\n<li>key\u5b57\u6bb5\u663e\u793a\u4f7f\u7528\u4e86idx_user_time_amount\u7d22\u5f15<\/li>\n<li>Extra\u5b57\u6bb5\u663e\u793a&quot;Using index&quot;\uff0c\u8868\u793a\u4f7f\u7528\u4e86\u8986\u76d6\u7d22\u5f15<\/li>\n<li>key_len\u4e3a9\uff0c\u8868\u793a\u7d22\u5f15\u4f7f\u7528\u4e869\u5b57\u8282\uff08user_id\u53604\u5b57\u8282\uff0corder_time\u53605\u5b57\u8282\uff09<\/li>\n<\/ul>\n<p>\u63d0\u793a\uff1akey_len\u8868\u793a\u67e5\u8be2\u5b9e\u9645\u4f7f\u7528\u7d22\u5f15\u7684\u5b57\u8282\u957f\u5ea6\uff0c\u53ef\u4ee5\u5224\u65ad\u8054\u5408\u7d22\u5f15\u4f7f\u7528\u6df1\u5ea6\u3002<\/p>\n<p>\u8986\u76d6\u7d22\u5f15\u7684\u4f7f\u7528\u5efa\u8bae\uff1a<\/p>\n<ul>\n<li>\u9488\u5bf9\u9ad8\u9891\u67e5\u8be2\uff0c\u8bbe\u8ba1\u4e13\u95e8\u7684\u8986\u76d6\u7d22\u5f15<\/li>\n<li>\u5c06WHERE\u6761\u4ef6\u4e2d\u7684\u5b57\u6bb5\u548cSELECT\u9700\u8981\u7684\u5b57\u6bb5\u90fd\u5305\u542b\u5728\u7d22\u5f15\u4e2d<\/li>\n<li>\u6ce8\u610f\u7d22\u5f15\u957f\u5ea6\uff0c\u907f\u514d\u521b\u5efa\u8fc7\u5927\u7684\u8054\u5408\u7d22\u5f15<\/li>\n<\/ul>\n","excerpt":"<p>\u5b58\u50a8\u5f15\u64ce MySQL\u4f53\u7cfb\u7ed3\u6784\uff1a \u5b58\u50a8\u5f15\u64ce\u5c31\u662f\u5b58\u50a8\u6570\u636e\u3001\u5efa\u7acb\u7d22\u5f15\u3001\u66f4\u65b0\/\u67e5\u8be2\u6570\u636e\u7b49\u6280\u672f\u7684\u5b9e\u73b0\u65b9\u5f0f\u3002\u5b58\u50a8\u5f15\u64ce\u662f\u57fa\u4e8e\u8868\u800c\u4e0d\u662f\u57fa\u4e8e\u5e93\u7684\uff0c\u6240\u4ee5\u5b58\u50a8\u5f15\u64ce\u4e5f\u53ef\u4ee5\u88ab\u79f0\u4e3a\u8868\u5f15\u64ce\u3002 \u9ed8\u8ba4\u5b58\u50a8\u5f15\u64ce\u662fInnoDB\u3002 \u76f8\u5173\u64cd\u4f5c\uff1a &#8212; \u67e5\u8be2\u5efa\u8868\u8bed\u53e5 show create table account; &#8212; &#8230;<\/p>\n","date":"2026-02-25 16:41:37","modified":"2026-03-05 17:07:41","categories":[{"id":64,"slug":"mysql","title":"MySql","description":"","parent":63,"post_count":10},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":65,"slug":"mysql","title":"MySql","description":"","post_count":14},{"id":31,"slug":"%e6%95%b0%e6%8d%ae%e5%ba%93","title":"\u6570\u636e\u5e93","description":"","post_count":33}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"bpu":["1|20260305"],"views":["239"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2911,"type":"post","slug":"mysql%e8%bf%9b%e9%98%b6%e4%ba%8c-%e8%a7%86%e5%9b%be%e3%80%81%e5%ad%98%e5%82%a8%e8%bf%87%e7%a8%8b%e3%80%81%e8%a7%a6%e5%8f%91%e5%99%a8","url":"https:\/\/qkongtao.cn\/?p=2911","status":"publish","title":"MySql\u8fdb\u9636(\u4e8c)\u2014\u2014\u89c6\u56fe\u3001\u5b58\u50a8\u8fc7\u7a0b\u3001\u89e6\u53d1\u5668","title_plain":"MySql\u8fdb\u9636(\u4e8c)\u2014\u2014\u89c6\u56fe\u3001\u5b58\u50a8\u8fc7\u7a0b\u3001\u89e6\u53d1\u5668","content":"<h2 id=\"h2-0\">\u89c6\u56fe<\/h2>\n<p>\u89c6\u56fe(View)\u662f\u4e00\u79cd\u865a\u62df\u5b58\u5728\u7684\u8868\u3002\u89c6\u56fe\u4e2d\u7684\u6570\u636e\u5e76\u4e0d\u5728\u6570\u636e\u5e93\u4e2d\u5b9e\u9645\u5b58\u5728\uff0c\u884c\u548c\u5217\u6570\u636e\u6765\u81ea\u5b9a\u4e49\u89c6\u56fe\u7684\u67e5\u8be2\u4e2d\u4f7f\u7528\u7684\u8868\uff0c\u5e76\u4e14\u662f\u5728\u4f7f\u7528\u89c6\u56fe\u65f6\u52a8\u6001\u751f\u6210\u7684\u3002<br \/>\n\u901a\u4fd7\u7684\u8bb2\uff0c\u89c6\u56fe\u53ea\u4fdd\u5b58\u4e86\u67e5\u8be2\u7684SQL\u903b\u8f91\uff0c\u4e0d\u4fdd\u5b58\u67e5\u8be2\u7ed3\u679c\u3002\u6240\u4ee5\u6211\u4eec\u5728\u521b\u5efa\u89c6\u56fe\u7684\u65f6\u5019\uff0c\u4e3b\u8981\u7684\u5de5\u4f5c\u5c31\u843d\u5728\u521b\u5efa\u8fd9\u6761SQL\u67e5\u8be2\u8bed\u53e5\u4e0a\u3002<\/p>\n<h3 id=\"h3-1\">\u8bed\u6cd5<\/h3>\n<p>\u521b\u5efa\u89c6\u56fe<\/p>\n<pre>CREATE [OR REPLACE] VIEW \u89c6\u56fe\u540d\u79f0(\u5217\u540d\u5217\u8868) AS SELECT\u8bed\u53e5[WITH[CASCADED|LOCAL] CHECK OPTION]<\/pre>\n<p>\u67e5\u770b\u521b\u5efa\u89c6\u56fe\u8bed\u53e5<\/p>\n<pre>SHOW CREATE VIEW \u89c6\u56fe\u540d\u79f0;<\/pre>\n<p>\u67e5\u770b\u89c6\u56fe\u6570\u636e<\/p>\n<pre>SELECT * FROM \u89c6\u56fe\u540d\u79f0\u2026;<\/pre>\n<p>\u67e5\u770b\u6570\u636e\u4e2d\u4e2d\u6240\u6709\u89c6\u56fe<\/p>\n<pre>SHOW FULL TABLES IN \u6570\u636e\u5e93\u540d WHERE Table_type = &#039;VIEW&#039;;<\/pre>\n<p>\u4fee\u6539\u89c6\u56fe<\/p>\n<pre>CREATE [OR REPLACE] VIEW \u89c6\u56fe\u540d\u79f0(\u5217\u540d\u5217\u8868) AS SELECT\u8bed\u53e5 [WITH [CASCADED|LOCAL] CHECK OPTION];  \u6216\nALTER VIEW \u89c6\u56fe\u540d\u79f0(\u5217\u540d\u5217\u8868) AS SELECT\u8bed\u53e5 [WITH [CASCADED|LOCAL] CHECK OPTION];<\/pre>\n<p>\u5220\u9664\u89c6\u56fe<\/p>\n<pre>DROP VIEW [IF EXISTS] \u89c6\u56fe\u540d\u79f0[,\u89c6\u56fe\u540d\u79f0];<\/pre>\n<h3 id=\"h3-2\">\u68c0\u67e5\u9009\u9879<\/h3>\n<p>\u5f53\u4f7f\u7528WITH CHECK OPTION\u5b50\u53e5\u521b\u5efa\u89c6\u56fe\u65f6\uff0cMySOL\u4f1a\u901a\u8fc7\u89c6\u56fe\u68c0\u67e5\u6b63\u5728\u66f4\u6539\u7684\u6bcf\u4e2a\u884c\uff0c\u4f8b\u5982 \u63d2\u5165\uff0c\u66f4\u65b0\uff0c\u5220\u9664\uff0c\u4ee5\u4f7f\u5176\u7b26\u5408\u89c6\u56fe\u7684\u5b9a\u4e49\u3002MySQL\u5141\u8bb8\u57fa\u4e8e\u53e6\u4e00\u4e2a\u89c6\u56fe\u521b\u5efa\u89c6\u56fe\uff0c\u5b83\u8fd8\u4f1a\u68c0\u67e5\u4f9d\u8d56\u89c6\u56fe\u4e2d\u7684\u89c4\u5219\u4ee5\u4fdd\u6301\u4e00\u81f4\u6027\u3002<br \/>\n\u89c6\u56fe\u7684\u63d2\u5165\u3001\u5220\u9664\u3001\u66f4\u65b0\u8bed\u53e5\u548c\u57fa\u672c\u8868\u7684\u8bed\u53e5\u4e00\u81f4\uff0c\u5f53\u6267\u884c\u589e\u5220\u6539\u64cd\u4f5c\u65f6\uff0c\u5b9e\u9645\u6539\u53d8\u7684\u662f\u57fa\u672c\u8868\u4e2d\u7684\u6570\u636e\uff0c\u4f46\u662f\u4e0d\u5efa\u8bae\u901a\u8fc7\u89c6\u56fe\u66f4\u6539\u57fa\u672c\u8868\u3002<br \/>\n\u4e3a\u4e86\u786e\u5b9a\u68c0\u67e5\u7684\u8303\u56f4\uff0cmysql \u63d0\u4f9b\u4e86\u4e24\u4e2a\u9009\u9879:CASCADED \u548c LOCAL\uff0c\u9ed8\u8ba4\u503c\u4e3aCASCADED<br \/>\n<strong>cascaded\uff1a\u5728\u5bf9\u89c6\u56fe\u8fdb\u884c\u66f4\u5220\u6539\u64cd\u4f5c\u65f6\uff0c\u4f1a\u6838\u67e5\u8be5\u89c6\u56fe\u53ca\u6240\u6709\u76f4\u63a5\u6216\u95f4\u63a5\u4f9d\u8d56\u7684\u89c6\u56fe\u521b\u5efa\u8bed\u53e5\u4e2d\u7684\u6761\u4ef6\uff0c\u53ea\u6709\u5f53\u6240\u6709\u6761\u4ef6\u90fd\u6ee1\u8db3\u624d\u80fd\u591f\u64cd\u4f5c\u6210\u529f<\/strong>\uff0c\u4f8b\u5982:<\/p>\n<ul>\n<li>create view v1 as select id,name from student where id&lt;=20;\u56e0\u4e3a\u6ca1\u6709\u6307\u5b9aWITH CHECK OPTION\u5b50\u53e5\uff0c\u63d2\u5165\u65f6\u4e0d\u4f1a\u6838\u67e5\u6761\u4ef6id&lt;=20\uff0c\u76f4\u63a5\u63d2\u5165\u6210\u529f<\/li>\n<li>create view v2 as select id,name from v1 where id&gt;10 with cascaded check option;\u63d2\u5165\u65f6\u4f1a\u6838\u67e5v2\u4e2d\u7684\u6761\u4ef6id&gt;10\u548cv1\u4e2d\u7684\u6761\u4ef6id&lt;=20\uff0c\u53ea\u6709\u5168\u90e8\u6ee1\u8db3\u65f6\u624d\u4f1a\u63d2\u5165\u6210\u529f\uff0c\u76f8\u5f53\u4e8e\u7ed9v1\u6dfb\u52a0\u4e86with cascaded check option\u5b50\u53e5<\/li>\n<li>create view v3 as select id,name from v2 where id&lt;=15;\u7531\u4e8ev3\u6ca1\u6709\u6307\u5b9aWITH CHECK OPTION\u5b50\u53e5\uff0c\u4e0d\u4f1a\u6838\u67e5\u6761\u4ef6id&lt;=15\uff0c\u4f46\u662f\u7531\u4e8ev2\u6307\u5b9a\u4e86with cascaded check option\u5b50\u53e5\uff0c\u6240\u4ee5\u4f1a\u6838\u67e5v2\u7684\u6761\u4ef6id&gt;10\u548cv1\u7684\u6761\u4ef6id&lt;=20;<\/li>\n<\/ul>\n<p><strong>local\uff1a\u5728\u5bf9\u89c6\u56fe\u8fdb\u884c\u66f4\u5220\u6539\u64cd\u4f5c\u65f6\uff0c\u4f1a\u6838\u67e5\u8be5\u89c6\u56fe\u53ca\u6240\u6709\u76f4\u63a5\u6216\u95f4\u63a5\u4f9d\u8d56\u7684\u4e14\u4f7f\u7528WITH CHECK OPTION\u5b50\u53e5\u7684\u89c6\u56fe\u521b\u5efa\u8bed\u53e5\u4e2d\u7684\u6761\u4ef6\uff0c\u53ea\u6709\u5f53\u6240\u6709\u6761\u4ef6\u90fd\u6ee1\u8db3\u624d\u80fd\u591f\u64cd\u4f5c\u6210\u529f<\/strong>\uff0c\u4f8b\u5982\uff1a<\/p>\n<ul>\n<li>create view v4 as select id,name from student where id&lt;=20;\u56e0\u4e3a\u6ca1\u6709\u6307\u5b9aWITH CHECK OPTION\u5b50\u53e5\uff0c\u63d2\u5165\u65f6\u4e0d\u4f1a\u6838\u67e5\u6761\u4ef6id&lt;=20\uff0c\u76f4\u63a5\u63d2\u5165\u6210\u529f<\/li>\n<li>create view v5 as select id,name from v4 where id&gt;10 with local check option;\u63d2\u5165\u65f6\u4f1a\u6838\u67e5v5\u4e2d\u7684\u6761\u4ef6id&gt;10\uff0c\u56e0\u4e3av4\u4e2d\u6ca1\u6709\u4f7f\u7528WITH CHECK OPTION\u5b50\u53e5\uff0c\u6240\u4ee5\u4e0d\u4f1a\u6838\u67e5v4\u4e2d\u7684\u6761\u4ef6id&lt;=20\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u4e0d\u4f1a\u7ed9v4\u6dfb\u52a0with local check option\u5b50\u53e5<\/li>\n<li>create view v6 as select id,name from v5 where id&lt;=15;\u56e0\u4e3a\u6ca1\u6709\u6307\u5b9aWITH CHECK OPTION\u5b50\u53e5\uff0c\u63d2\u5165\u65f6\u4e0d\u4f1a\u6838\u67e5\u6761\u4ef6id&lt;=15\uff0c\u7531\u4e8ev5\u4f7f\u7528\u4e86with local check option\u5b50\u53e5\uff0c\u6240\u4ee5\u4f1a\u6838\u67e5v5\u4e2d\u7684\u6761\u4ef6id&gt;10\uff0c\u53c8\u56e0\u4e3av4\u4e2d\u6ca1\u6709\u4f7f\u7528WITH CHECK OPTION\u5b50\u53e5\uff0c\u6240\u4ee5\u4e0d\u4f1a\u6838\u67e5v4\u4e2d\u7684\u6761\u4ef6id&lt;=20\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u4ec5\u4ec5\u6838\u67e5\u6709with local check option\u5b50\u53e5\u7684\u89c6\u56fe\u4e2d\u7684\u6761\u4ef6<\/li>\n<\/ul>\n<h3 id=\"h3-3\">\u66f4\u65b0\u53ca\u4f5c\u7528<\/h3>\n<p>\u8981\u4f7f\u89c6\u56fe\u53ef\u66f4\u65b0\uff0c\u89c6\u56fe\u4e2d\u7684\u884c\u4e0e\u57fa\u7840\u8868\u4e2d\u7684\u884c\u4e4b\u95f4\u5fc5\u987b\u5b58\u5728\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u5373\u89c6\u56fe\u4e2d\u7684\u6bcf\u4e00\u884c\u5fc5\u987b\u76f4\u63a5\u5bf9\u5e94\u57fa\u7840\u8868\u4e2d\u7684\u552f\u4e00\u4e00\u884c\uff0c\u4e0d\u80fd\u6709\u591a\u884c\u6620\u5c04\u5230\u89c6\u56fe\u4e2d\u7684\u540c\u4e00\u884c\uff0c\u4e5f\u4e0d\u80fd\u6709\u89c6\u56fe\u4e2d\u7684\u4e00\u884c\u6620\u5c04\u5230\u57fa\u7840\u8868\u4e2d\u7684\u591a\u884c<br \/>\n\u5982\u679c\u89c6\u56fe\u5305\u542b\u4ee5\u4e0b\u4efb\u4f55\u4e00\u9879\uff0c\u5219\u8be5\u89c6\u56fe\u4e0d\u53ef\u66f4\u65b0\u6216\u63d2\u5165\uff1a<\/p>\n<ol>\n<li>\u805a\u5408\u51fd\u6570\u6216\u7a97\u53e3\u51fd\u6570SUM()\u3001MIN()\u3001MAX()\u3001COUNT()\u7b49<\/li>\n<li>DISTINCT<\/li>\n<li>GROUP BY<\/li>\n<li>HAVINGA<\/li>\n<li>UNION \u6216\u8005 UNION ALL<\/li>\n<\/ol>\n<h3 id=\"h3-4\">\u89c6\u56fe\u7684\u4f5c\u7528<\/h3>\n<ul>\n<li>\u7b80\u5355<br \/>\n\u89c6\u56fe\u4e0d\u4ec5\u53ef\u4ee5\u7b80\u5316\u7528\u6237\u5bf9\u6570\u636e\u7684\u7406\u89e3\uff0c\u4e5f\u53ef\u4ee5\u7b80\u5316\u4ed6\u4eec\u7684\u64cd\u4f5c\u3002\u90a3\u4e9b\u88ab\u7ecf\u5e38\u4f7f\u7528\u7684\u67e5\u8be2\u53ef\u4ee5\u88ab\u5b9a\u4e49\u4e3a\u89c6\u56fe\uff0c\u4ece\u800c\u4f7f\u5f97\u7528\u6237\u4e0d\u5fc5\u4e3a\u4ee5\u540e\u7684\u64cd\u4f5c\u6bcf\u6b21\u6307\u5b9a\u5168\u90e8\u7684\u6761\u4ef6\u3002<\/li>\n<li>\u5b89\u5168<br \/>\n\u6570\u636e\u5e93\u53ef\u4ee5\u6388\u6743\uff0c\u4f46\u4e0d\u80fd\u6388\u6743\u5230\u6570\u636e\u5e93\u7279\u5b9a\u884c\u548c\u7279\u5b9a\u7684\u5217\u4e0a\u3002\u901a\u8fc7\u89c6\u56fe\u7528\u6237\u53ea\u80fd\u67e5\u8be2\u548c\u4fee\u6539\u4ed6\u4eec\u6240\u80fd\u89c1\u5230\u7684\u6570\u636e\u3002<\/li>\n<li>\u6570\u636e\u72ec\u7acb<br \/>\n\u89c6\u56fe\u53ef\u5e2e\u52a9\u7528\u6237\u5c4f\u853d\u771f\u5b9e\u8868\u7ed3\u6784\u53d8\u5316\u5e26\u6765\u7684\u5f71\u54cd\u3002<\/li>\n<\/ul>\n<h2 id=\"h2-5\">\u5b58\u50a8\u8fc7\u7a0b<\/h2>\n<p>\u5b58\u50a8\u8fc7\u7a0b\u662f\u4e8b\u5148\u7ecf\u8fc7\u7f16\u8bd1\u5e76\u5b58\u50a8\u5728\u6570\u636e\u5e93\u4e2d\u7684\u4e00\u6bb5 SQL\u8bed\u53e5\u7684\u96c6\u5408\uff0c\u8c03\u7528\u5b58\u50a8\u8fc7\u7a0b\u53ef\u4ee5\u7b80\u5316\u5e94\u7528\u5f00\u53d1\u4eba\u5458\u7684\u5f88\u591a\u5de5\u4f5c\uff0c\u51cf\u5c11\u6570\u636e\u5728\u6570\u636e\u5e93\u548c\u5e94\u7528\u670d\u52a1\u5668\u4e4b\u95f4\u7684\u4f20\u8f93\uff0c\u5bf9\u4e8e\u63d0\u9ad8\u6570\u636e\u5904\u7406\u7684\u6548\u7387\u662f\u6709\u597d\u5904\u7684\u3002<br \/>\n\u5b58\u50a8\u8fc7\u7a0b\u601d\u60f3\u4e0a\u5f88\u7b80\u5355\uff0c\u5c31\u662f\u6570\u636e\u5e93 SQL\u8bed\u8a00\u5c42\u9762\u7684\u4ee3\u7801\u5c01\u88c5\u4e0e\u91cd\u7528<br \/>\n<strong>\u7279\u70b9\uff1a<\/strong><\/p>\n<ul>\n<li>\u5c01\u88c5\uff0c\u590d\u7528<\/li>\n<li>\u53ef\u4ee5\u63a5\u6536\u53c2\u6570\uff0c\u4e5f\u53ef\u4ee5\u8fd4\u56de\u6570\u636e<\/li>\n<li>\u51cf\u5c11\u7f51\u7edc\u4ea4\u4e92\uff0c\u6548\u7387\u63d0\u5347<\/li>\n<\/ul>\n<h3 id=\"h3-6\">1.\u57fa\u672c\u8bed\u6cd5<\/h3>\n<p>\u521b\u5efa<\/p>\n<pre>CREATE PROCEDURE \u5b58\u50a8\u8fc7\u7a0b\u540d\u5b57([\u53c2\u6570\u5217\u8868])\nBEGIN\n  SQL\u8bed\u53e5\nEND;<\/pre>\n<p>\u8c03\u7528<\/p>\n<pre>CALL \u540d\u79f0([\u53c2\u6570]);<\/pre>\n<p>\u67e5\u770b<\/p>\n<pre>SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA=&#039;xx&#039;;     ##\u67e5\u8be2\u6570\u636e\u5e93\u7684\u5b58\u50a8\u8fc7\u7a0b\u53ca\u72b6\u6001\u4fe1\u606f\nSHOW CREATE PROCEDURE \u5b58\u50a8\u8fc7\u7a0b\u540d\u79f0;    ##\u67e5\u8be2\u67d0\u4e2a\u5b58\u50a8\u8fc7\u7a0b\u7684\u5b9a\u4e49<\/pre>\n<p>\u5220\u9664<\/p>\n<pre>DROP PROCEDURE [IF EXISTS]\u5b58\u50a8\u8fc7\u7a0b\u540d\u79f0;<\/pre>\n<p><strong>\u6ce8\u610f\uff1a\u5728\u547d\u4ee4\u884c\u4e2d\uff0c\u6267\u884c\u5b58\u50a8\u8fc7\u7a0b\u7684SQL\u8bed\u53e5\u65f6\uff0c\u9700\u8981\u901a\u8fc7\u5173\u952e\u5b57delimiter\u6307\u5b9aSQL\u8bed\u53e5\u7684\u7ed3\u675f\u7b26\uff0c\u5982\uff1adelimiter $$\uff0c\u6b64\u4f1a\u8bdd\u4e4b\u540e\u6240\u6709\u7684SQL\u8bed\u53e5\u9047\u5230\u5206\u53f7\u4e0d\u4f1a\u7ed3\u675f\uff0c\u7ed3\u675f\u7b26\u7531\u5206\u53f7\u66ff\u6362\u6210\u4e86$$<\/strong><\/p>\n<h3 id=\"h3-7\">2.\u53d8\u91cf<\/h3>\n<h4>2.1 \u7cfb\u7edf\u53d8\u91cf<\/h4>\n<p>\u7cfb\u7edf\u53d8\u91cf\u662fMySQL\u670d\u52a1\u5668\u63d0\u4f9b\uff0c\u4e0d\u662f\u7528\u6237\u5b9a\u4e49\u7684\uff0c\u5c5e\u4e8e\u670d\u52a1\u5668\u5c42\u9762\u3002\u5206\u4e3a\u5168\u5c40\u53d8\u91cf(GLOBAL)\u3001\u4f1a\u8bdd\u53d8\u91cf(SESSION)<br \/>\n\u67e5\u770b\u7cfb\u7edf\u53d8\u91cf<\/p>\n<pre>SHOW [SESSION|GLOBAL] VARIABLES ;    --\u67e5\u770b\u6240\u6709\u7cfb\u7edf\u53d8\u91cf\nSHOW [SESSION|GLOBAL] VARIABLES LIKE &#039;...&#039;;    --\u53ef\u4ee5\u901a\u8fc7LIKE\u6a21\u7cca\u5339\u914d\u65b9\u5f0f\u67e5\u627e\u53d8\u91cf\nSELECT @@[SESSION.|GLOBAL.]\u7cfb\u7edf\u53d8\u91cf\u540d;    --\u67e5\u770b\u6307\u5b9a\u53d8\u91cf\u7684\u503c<\/pre>\n<p>\u8bbe\u7f6e\u7cfb\u7edf\u53d8\u91cf<\/p>\n<pre>SET [SESSION|GLOBAL] \u7cfb\u7edf\u53d8\u91cf\u540d = \u503c;    --\u8bbe\u7f6e\u5168\u5c40\/\u4f1a\u8bdd\u53d8\u91cf\nSET @@GLOBAL.\u7cfb\u7edf\u53d8\u91cf\u540d = \u503c, @@SESSION.\u7cfb\u7edf\u53d8\u91cf\u540d = \u503c;    --\u540c\u65f6\u8bbe\u7f6e\u5168\u5c40\u7cfb\u7edf\u53d8\u91cf\u548c\u4f1a\u8bdd\u7cfb\u7edf\u53d8\u91cf<\/pre>\n<ul>\n<li>\u5982\u679c\u6ca1\u6709\u6307\u5b9a session \/ global\uff0c\u9ed8\u8ba4 session\uff0c\u4f1a\u8bdd\u53d8\u91cf<\/li>\n<li>myesql \u670d\u52a1\u5668\u91cd\u542f\u4e4b\u540e\uff0c\u6240\u8bbe\u7f6e\u7684\u5168\u5c40\u53c2\u6570\u4f1a\u5931\u6548\uff0c\u8981\u60f3\u4e0d\u5931\u6548\uff0c\u9700\u8981\u66f4\u6539\/etc\/my.cnf \u4e2d\u7684\u914d\u7f6e\u3002<\/li>\n<\/ul>\n<h4>2.2 \u7528\u6237\u5b9a\u4e49\u53d8\u91cf<\/h4>\n<p>\u7528\u6237\u5b9a\u4e49\u53d8\u91cf\u662f\u7528\u6237\u6839\u636e\u9700\u8981\u81ea\u5df1\u5b9a\u4e49\u7684\u53d8\u91cf\uff0c\u7528\u6237\u53d8\u91cf\u4e0d\u7528\u63d0\u524d\u58f0\u660e\uff0c\u5728\u7528\u7684\u65f6\u5019\u76f4\u63a5\u7528\u201c@\u53d8\u91cf\u540d\u201d\u4f7f\u7528\u5c31\u53ef\u4ee5\u3002\u5176\u4f5c\u7528\u57df\u4e3a\u5f53\u524d\u8fde\u63a5<br \/>\n\u8d4b\u503c<\/p>\n<pre>SET @var_name = expr [,@var_name = expr]...;    --\u5b9a\u4e49\u5355\u4e2a\u6216\u591a\u4e2a\u53d8\u91cf\nSET @var_name := expr [,@var_name := expr]...;\n\nSELECT @var_name := expr [,@var_name = expr]...;\nSELECT \u5b57\u6bb5\u540d INTO @var_name FROM \u8868\u540d;    --\u5c06\u67e5\u8be2\u7ed3\u679c\u8d4b\u503c\u7ed9\u53d8\u91cf@var_name<\/pre>\n<p>\u4f7f\u7528<\/p>\n<pre>SELECT @var_name;<\/pre>\n<ul>\n<li>\u7528\u6237\u5b9a\u4e49\u7684\u53d8\u91cf\u65e0\u9700\u5bf9\u5176\u8fdb\u884c\u58f0\u660e\u6216\u8005\u521d\u59cb\u5316\uff0c\u53ea\u4e0d\u8fc7\u83b7\u53d6\u5230\u7684\u503c\u4e3a NULL<\/li>\n<\/ul>\n<h4>2.3 \u5c40\u90e8\u53d8\u91cf<\/h4>\n<p>\u5c40\u90e8\u53d8\u91cf\u662f\u6839\u636e\u9700\u8981\u5b9a\u4e49\u7684\u5728\u5c40\u90e8\u751f\u6548\u7684\u53d8\u91cf\uff0c\u8bbf\u95ee\u4e4b\u524d\uff0c\u9700\u8981DECLARE\u58f0\u660e\u3002\u53ef\u7528\u4f5c\u5b58\u50a8\u8fc7\u7a0b\u5185\u7684\u5c40\u90e8\u53d8\u91cf\u548c\u8f93\u5165\u53c2\u6570\uff0c\u5c40\u90e8\u53d8\u91cf\u7684\u8303\u56f4\u662f\u5728\u5176\u5185\u58f0\u660e\u7684BEGIN .. END\u5757<br \/>\n\u58f0\u660e<\/p>\n<pre>DECLARE \u53d8\u91cf\u540d \u53d8\u91cf\u7c7b\u578b [DEFAULT \u9ed8\u8ba4\u503c];<\/pre>\n<ul>\n<li>\u53d8\u91cf\u7c7b\u578b\u5c31\u662f\u6570\u636e\u5e93\u5b57\u6bb5\u7c7b\u578b\uff1aINT\u3001BIGINT\u3001CHAR\u3001VARCHAR\u3001DATE\u3001TIME\u7b49<\/li>\n<\/ul>\n<p>\u8d4b\u503c<\/p>\n<pre>SET \u53d8\u91cf\u540d=\u503c;\n\nSET \u53d8\u91cf\u540d:=\u503c;\n\nSELECT \u5b57\u6bb5\u540d INTO \u53d8\u91cf\u540d FROM \u8868\u540d ...;    --\u5c06\u67e5\u8be2\u7ed3\u679c\u8d4b\u503c\u7ed9\u5c40\u90e8\u53d8\u91cf<\/pre>\n<h3 id=\"h3-8\">3.if \u5224\u65ad<\/h3>\n<p>\u8bed\u6cd5<\/p>\n<pre>IF \u6761\u4ef61 THEN\n        \u8bed\u53e51\nELSEIF \u6761\u4ef62 THEN       -- \u53ef\u9009\n        \u8bed\u53e52\n...\nELSE                   -- \u53ef\u9009\n        \u8bed\u53e5n\nEND IF;<\/pre>\n<p>\u6267\u884c\u6d41\u7a0b\uff1a\u5148\u5224\u65ad\u6761\u4ef61\u662f\u5426\u6210\u7acb\uff0c\u6210\u7acb\u5c31\u6267\u884c\u8bed\u53e51\uff0c\u5426\u5219\u5224\u65ad\u6761\u4ef62\u662f\u5426\u6210\u7acb\uff0c\u6210\u7acb\u5c31\u6267\u884c\u8bed\u53e52\uff0c\u5426\u5219\u7ee7\u7eed\u5224\u65ad\uff0c\u6700\u540e\u6267\u884c\u8bed\u53e5n<br \/>\n\u6848\u4f8b<\/p>\n<pre>create procedure p3()\nbegin\n  declare score int default 58;\n  declare result varchar(10);\n  if score &gt;= 85 then\n    set result :=&#039;\u4f18\u79c0&#039;;\n  elseif score &gt;= 60 then\n    set result :=&#039;\u53ca\u683c&#039;;\n  else\n    set result :=&#039;\u4e0d\u53ca\u683c&#039;;\n  end if;\n  select result;\nend;<\/pre>\n<h3 id=\"h3-9\">4.\u5e26\u53c2\u5b58\u50a8\u8fc7\u7a0b<\/h3>\n<p><img alt=\"MySql\u8fdb\u9636(\u4e8c)\u2014\u2014\u89c6\u56fe\u3001\u5b58\u50a8\u8fc7\u7a0b\u3001\u89e6\u53d1\u5668-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e8c)\u2014\u2014\u89c6\u56fe\u3001\u5b58\u50a8\u8fc7\u7a0b\u3001\u89e6\u53d1\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-154510-fX.png\" alt=\"20260305-154510-fX.png\" \/><\/p>\n<p>\u7528\u6cd5<\/p>\n<pre>CREATE PROCEDURE \u5b58\u50a8\u8fc7\u7a0b\u540d\u79f0([IN|OUT|INOUT \u53c2\u6570\u540d \u53c2\u6570\u7c7b\u578b ]...)\nBEGIN\n    SQL\u8bed\u53e5\nEND;<\/pre>\n<h3 id=\"h3-10\">5.case\u8bed\u53e5<\/h3>\n<p>\u8bed\u6cd5\u4e00<\/p>\n<pre>CASE case_value\n  WHEN when_value1 THEN statement_list1\n  [WHEN when_value2 THEN statement_list2]...\n  [ELSE statement_list ]\nEND CASE;<\/pre>\n<p>\u5148\u5f97\u5230case_value\u7684\u503c\uff0c\u4f9d\u6b21\u4e0e\u6bcf\u4e2aWHEN\u540e\u7684\u6570\u503cwhen_value\u6bd4\u8f83\uff0c\u5982\u679c\u76f8\u7b49\u5c31\u6267\u884c\u76f8\u5e94\u7684statement_list\u8bed\u53e5\uff0c\u7136\u540e\u7ed3\u675fCASE\u8bed\u53e5\uff0c\u5982\u679c\u6ca1\u6709\u4e00\u4e2awhen_value\u4e0ecase_value\u76f8\u7b49\uff0c\u4f1a\u6267\u884c\u8bed\u53e5ELSE\u540e\u7684\u8bed\u53e5statement_list\uff0c\u7136\u540e\u7ed3\u675fCASE\u8bed\u53e5<\/p>\n<p>\u8bed\u6cd5\u4e8c<\/p>\n<pre>CASE\n  WHEN search_conditionl THEN statement_list1\n  WHEN search_condition2 THEN statement_list2]...\n  [ELSE statement_list]\nEND CASE;<\/pre>\n<p>\u6309\u7167\u987a\u5e8f\u5224\u65ad\u6bcf\u4e2aWHEN\u540e\u7684\u6761\u4ef6search_condition\uff0c\u5982\u679c\u6761\u4ef6\u4e3atrue\uff0c\u5c31\u6267\u884c\u76f8\u5e94\u7684\u8bed\u53e5statement_list\uff0c\u7136\u540e\u7ed3\u675fCASE\u8bed\u53e5\uff0c\u5982\u679c\u6bcf\u4e2aWHEN\u540e\u7684\u6761\u4ef6search_condition\u90fd\u4e3afalse\uff0c\u5c31\u6267\u884cELSE\u540e\u7684\u8bed\u53e5statement_list\uff0c\u7136\u540e\u7ed3\u675fCASE\u8bed\u53e5<\/p>\n<h3 id=\"h3-11\">6.\u5faa\u73af<\/h3>\n<h4>6.1 while<\/h4>\n<p>while \u5faa\u73af\u662f\u6709\u6761\u4ef6\u7684\u5faa\u73af\u63a7\u5236\u8bed\u53e5\u3002\u6ee1\u8db3\u6761\u4ef6\u540e\uff0c\u518d\u6267\u884c\u5faa\u73af\u4f53\u4e2d\u7684SQL\u8bed\u53e5<br \/>\n\u8bed\u6cd5<\/p>\n<pre>--\u5148\u5224\u5b9a\u6761\u4ef6\uff0c\u5982\u679c\u6761\u4ef6\u4e3atrue\uff0c\u5219\u6267\u884c\u903b\u8f91\uff0c\u5426\u5219\uff0c\u4e0d\u6267\u884c\u903b\u8f91\nWHILE \u5faa\u73af\u6761\u4ef6 DO\n  SOL\u903b\u8f91...\nEND WHILE;<\/pre>\n<p>\u6848\u4f8b<\/p>\n<pre>--\u8ba1\u7b97\u4ece1\u7d2f\u52a0\u5230 n \u7684\u503c\ncreate procedure p7(in n int)\nbegin\n  declare total int default 0;\n\n  while n&gt;0 do\n    set total := total + n\n    set n:=n-1;\n  end while;\n\n  select total;\nend;\ncall p7( n: 100);<\/pre>\n<h4>6.2 repeat<\/h4>\n<p>repeat\u662f\u6709\u6761\u4ef6\u7684\u5faa\u73af\u63a7\u5236\u8bed\u53e5,\u5f53\u6ee1\u8db3\u6761\u4ef6\u7684\u65f6\u5019\u9000\u51fa\u5faa\u73af<br \/>\n\u4e0e while \u533a\u522b\uff1a<\/p>\n<ol>\n<li>\u5148\u8fdb\u884c\u5faa\u73af\u4e00\u6b21\u518d\u5224\u65ad\u3002\u76f8\u5f53\u4e8e c \u8bed\u8a00\u4e2d\u7684 do while();<\/li>\n<li>\u6ee1\u8db3\u6761\u4ef6\u5219\u9000\u51fa<\/li>\n<\/ol>\n<p>\u8bed\u6cd5<\/p>\n<pre>--\u5148\u6267\u884c\u4e00\u6b21\u903b\u8f91\uff0c\u7136\u540e\u5224\u5b9a\u903b\u8f91\u662f\u5426\u6ee1\u8db3\uff0c\u5982\u679c\u6ee1\u8db3\uff0c\u5219\u9000\u51fa\u3002\u5982\u679c\u4e0d\u6ee1\u8db3\uff0c\u5219\u7ee7\u7eed\u4e0b\u4e00\u6b21\u5faa\u73af\nREPEAT\n  SOL\u903b\u8f91\n  UNTIL \u5faa\u73af\u6761\u4ef6\nEND REPEAT;<\/pre>\n<p>\u6848\u4f8b<\/p>\n<pre>--\u8ba1\u7b97\u4ece1\u7d2f\u52a0\u5230 n \u7684\u503c\ncreate procedure p8(in n int)\nbegin\n  declare total int default 0;\n\n  repeat\n    set total := total + n;\n    set n := n - 1;\n  until n &lt;= 0\n  end repeat;\n\n  select total;\nend;\n\ncall p8( n: 100);<\/pre>\n<h4>6.3 loop<\/h4>\n<p>LOOP \u5b9e\u73b0\u7b80\u5355\u7684\u5faa\u73af\uff0c\u5982\u679c\u4e0d\u5728SQL\u903b\u8f91\u4e2d\u589e\u52a0\u9000\u51fa\u5faa\u73af\u7684\u6761\u4ef6\uff0c\u53ef\u4ee5\u7528\u5176\u6765\u5b9e\u73b0\u7b80\u5355\u7684\u6b7b\u5faa\u73af\u3002LOOP\u53ef\u4ee5\u914d\u5408\u4ee5\u4e0b\u4e24\u4e2a\u8bed\u53e5\u4f7f\u7528<\/p>\n<ol>\n<li>LEAVE\uff1a\u914d\u5408\u5faa\u73af\u4f7f\u7528\uff0c\u9000\u51fa\u5faa\u73af\uff08\u7c7b\u4f3cbreak\uff09<\/li>\n<li>ITERATE\uff1a\u5fc5\u987b\u7528\u5728\u5faa\u73af\u4e2d\uff0c\u4f5c\u7528\u662f\u8df3\u8fc7\u5f53\u524d\u5faa\u73af\u5269\u4e0b\u7684\u8bed\u53e5\uff0c\u76f4\u63a5\u8fdb\u5165\u4e0b\u4e00\u6b21\u5faa\u73af\uff08\u7c7b\u4f3ccontinue\uff09<\/li>\n<\/ol>\n<p>\u8bed\u53e5<\/p>\n<pre>--label\uff1aLOOP\u5faa\u73af\u7684\u540d\u5b57\n[begin label:] LOOP\n  SQL\u903b\u8f91\nEND LOOP [end label];\n\nLEAVE label;  -- \u9000\u51fa\u6307\u5b9a\u6807\u8bb0\u7684\u5faa\u73af\u4f53\nITERATE label;  -- \u76f4\u63a5\u8fdb\u5165\u4e0b\u4e00\u6b21\u5faa\u73af<\/pre>\n<p>\u6848\u4f8b<\/p>\n<pre>--\u8ba1\u7b97\u4ece1\u5230n\u4e4b\u95f4\u7684\u5076\u6570\u7d2f\u52a0\u7684\u503c\ncreate procedure p10(in n int)\nbegin \n  declare total int default 0;\n\n  sum: loop\n    if n &lt;= 1 then\n      leave sum;\n    end if;\n\n    if n %2 = 1 then\n      set n := n - 1;\n      iterate sum;\n    end if;\n\n    set total := total + n;\n    set n := n - 1;\n  end loop sum;\n\n  select total;\nend;<\/pre>\n<h3 id=\"h3-12\">7.\u6e38\u6807-cursor<\/h3>\n<p>\u6e38\u6807(CURSOR)\u662f\u7528\u6765\u5b58\u50a8\u67e5\u8be2\u7ed3\u679c\u96c6\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5728\u5b58\u50a8\u8fc7\u7a0b\u548c\u51fd\u6570\u4e2d\u53ef\u4ee5\u4f7f\u7528\u6e38\u6807\u5bf9\u7ed3\u679c\u96c6\u8fdb\u884c\u5faa\u73af\u7684\u5904\u7406\u3002\u6e38\u6807\u7684\u4f7f\u7528\u5305\u62ec\u6e38\u6807\u7684\u58f0\u660e\u3001OPEN\u3001FETCH\u548c CLOSE\uff0c\u5176\u8bed\u6cd5\u5206\u522b\u5982\u4e0b<br \/>\n\u58f0\u660e\u6e38\u6807<\/p>\n<pre>DECLARE \u6e38\u6807\u540d\u79f0 CURSOR FOR \u67e5\u8be2\u8bed\u53e5;<\/pre>\n<ul>\n<li>\u6e38\u6807\u7684\u58f0\u660e\u5fc5\u987b\u653e\u5230\u53d8\u91cf\u58f0\u660e\u7684\u540e\u9762\uff0c\u5426\u5219\u4f1a\u51fa\u9519\u65e0\u6cd5\u8fd0\u884c\u6210\u529f<\/li>\n<\/ul>\n<p>\u6253\u5f00\u6e38\u6807<\/p>\n<pre>OPEN \u6e38\u6807\u540d\u79f0;<\/pre>\n<p>\u83b7\u53d6\u6e38\u6807\u8bb0\u5f55<\/p>\n<pre>FETCH \u6e38\u6807\u540d\u79f0 INTO \u53d8\u91cf[,\u53d8\u91cf];<\/pre>\n<p>\u5173\u95ed\u6e38\u6807<\/p>\n<pre>CLOSE \u6e38\u6807\u540d\u79f0;<\/pre>\n<p>\u6848\u4f8b<\/p>\n<pre>--\u6839\u636e\u4f20\u5165\u7684\u53c2\u6570uage\uff0c\u6765\u67e5\u8be2\u7528\u6237\u8868tb_user \u4e2d\uff0c \u6240\u6709\u7684\u7528\u6237\u5e74\u9f84\u5c0f\u4e8euage\u7684\u7528\u6237\u59d3\u540d\uff08name)\u548c\u4e13\u4e1a\uff08profession\uff09\uff0c\n--\u5e76\u5c06\u7528\u6237\u7684\u59d3\u540d\u548c\u4e13\u4e1a\u63d2\u5165\u5230\u6240\u521b\u5efa\u7684\u4e00\u5f20\u65b0\u8868(id,name,profession)\u4e2d\ncreate procedure p11(in uage int)\nbegin \n  declare uname varchar(100);\n  declare upro varchar(100);\n  --\u58f0\u660e\u6e38\u6807\uff0c\u5b58\u50a8\u67e5\u8be2\u7ed3\u679c\u96c6\n  declare u_cursor cursor for select name, profession from tb_user where age &lt;= uage;\n  --\u521b\u5efa\u8868tb_user_pro\u5b58\u6e38\u6807\u4e2d\u7684\u8bb0\u5f55\n  drop table if exists tb_user_pro;\n  create table if not exists tb_user_pro(\n    id int primary key auto_increment,\n    name varchar(100),\n    profession varchar(100)\n  );\n  --\u6253\u5f00\u6e38\u6807\n  open u_cursor;\n  --\u83b7\u53d6\u6e38\u6807\u4e2d\u7684\u6570\u636e\u5e76\u5c06\u5176\u63d2\u5165\u5230\u8868tb_user_pro\u4e2d\uff0c\u4f1a\u53d1\u751f\u9519\u8bef02000\uff0c\u89e3\u51b3\u65b9\u6cd5\u89c1 \u6761\u4ef6\u5904\u7406\u7a0b\u5e8f-handler\u7684\u6848\u4f8b\n  while true do\n    fetch u_cursor into uname,upro;\n    insert into tb_user_pro values(null, uname, upro);\n  end while;\n  close u_cursor;\nend;<\/pre>\n<h3 id=\"h3-13\">8.\u6761\u4ef6\u5904\u7406\u7a0b\u5e8f-handler<\/h3>\n<p>\u6761\u4ef6\u5904\u7406\u7a0b\u5e8f(Handler)\u53ef\u4ee5\u7528\u6765\u5b9a\u4e49\u5728\u6d41\u7a0b\u63a7\u5236\u7ed3\u6784\u6267\u884c\u8fc7\u7a0b\u4e2d\u9047\u5230\u95ee\u9898\u65f6\u76f8\u5e94\u7684\u5904\u7406\u6b65\u9aa4<br \/>\n\u8bed\u6cd5<\/p>\n<pre>DECLARE handler_action HANDLER FOR condition_value1, condition_value2... statement;\n\nhandler_action\n  CONTINUE: \u7ee7\u7eed\u6267\u884c\u5f53\u524d\u7a0b\u5e8f\n  EXIT: \u7ec8\u6b62\u6267\u884c\u5f53\u524d\u7a0b\u5e8f\uff0c\u5373\u9000\u51fa\u5f53\u524d\u7684&quot;BEGIN...END&quot;\u5757\n\ncondition_value\n  SQLSTATE sqlstate_value\uff1a\u72b6\u6001\u7801\uff0c\u5982 02000\n  SQLWARNING\uff1a\u6240\u6709\u4ee501\u5f00\u5934\u7684SQLSTATE\u4ee3\u7801\u7684\u7b80\u5199\n  NOT FOUND\uff1a\u6240\u6709\u4ee502\u5f00\u5934\u7684SQLSTATE\u4ee3\u7801\u7684\u7b80\u5199\n  SQLEXCEPTION\uff1a\u6240\u6709\u6ca1\u6709\u88abSQLWARNING \u6216 NOT FOUND\u6355\u83b7\u7684SQLSTATE\u4ee3\u7801\u7684\u7b80\u5199<\/pre>\n<p>\u6848\u4f8b<\/p>\n<pre>create procedure p11(in uage int)\nbegin \n  declare uname varchar(100);\n  declare upro varchar(100);\n  declare u_cursor cursor for select name, profession from tb_user where age &lt;= uage;\n\n  -- \u76d1\u63a7\u523002000\u7684\u72b6\u6001\u7801\u540e\uff0c\u5173\u95ed\u6e38\u6807\u540e\u6267\u884cexit\u9000\u51fa\u64cd\u4f5c\u3002\n  declare exit handler for not found close u_cursor; \n\n  drop table if exists tb_user_pro;\n  create table if not exists tb_user_pro(\n    id int primary key auto_increment,\n    name varchar(100),\n    profession varchar(100)\n  );\n\n  open u_cursor;\n  while true do\n    fetch u_cursor into uname,upro;\n    insert into tb_user_pro values(null, uname, upro);\n  end while;\n  close u_cursor;\nend;<\/pre>\n<h3 id=\"h3-14\">9.\u5b58\u50a8\u51fd\u6570<\/h3>\n<p>\u5b58\u50a8\u51fd\u6570\u662f\u6709\u8fd4\u56de\u503c\u7684\u5b58\u50a8\u8fc7\u7a0b\uff0c\u5b58\u50a8\u51fd\u6570\u7684\u53c2\u6570\u53ea\u80fd\u662fIN\u7c7b\u578b\u7684<br \/>\n\u5b58\u50a8\u51fd\u6570\u7528\u7684\u8f83\u5c11\uff0c\u80fd\u591f\u4f7f\u7528\u5b58\u50a8\u51fd\u6570\u7684\u5730\u65b9\u90fd\u53ef\u4ee5\u7528\u5b58\u50a8\u8fc7\u7a0b\u66ff\u6362<br \/>\n\u8bed\u6cd5<\/p>\n<pre>CREATE FUNCTION \u5b58\u50a8\u51fd\u6570\u540d\u79f0([ \u53c2\u6570\u5217\u8868 ])\nRETURNS type [characteristic ...]\nBEGIN\n  SQL\u8bed\u53e5\n  RETURN \u8fd4\u56de\u503c;\nEND ;\n\ncharacteristic\u8bf4\u660e:\n DETERMINISTIC\uff1a\u76f8\u540c\u7684\u8f93\u5165\u53c2\u6570\u603b\u662f\u4ea7\u751f\u76f8\u540c\u7684\u7ed3\u679c\n NO SQL\uff1a\u4e0d\u5305\u542bSQL\u8bed\u53e5\u3002\n READS SQL DATA\uff1a\u5305\u542b\u8bfb\u53d6\u6570\u636e\u7684\u8bed\u53e5\uff0c\u4f46\u4e0d\u5305\u542b\u5199\u5165\u6570\u636e\u7684\u8bed\u53e5<\/pre>\n<p>\u6848\u4f8b<\/p>\n<pre>--\u8ba1\u7b97\u4ece1\u7d2f\u52a0\u5230 n \u7684\u503c\ncreate function fun1(n int)\nreturns int deterministic\nbegin\n  declare total int default 0;\n\n  while n &gt; 0 do \n    set total := total + n;\n    set n := n - 1;\n  end while;\n\n  return total;\nend;<\/pre>\n<h2 id=\"h2-15\">\u89e6\u53d1\u5668<\/h2>\n<p>\u89e6\u53d1\u5668\u662f\u4e0e\u8868\u6709\u5173\u7684\u6570\u636e\u5e93\u5bf9\u8c61\uff0c\u6307\u5728 insert\/update\/delete \u4e4b\u524d\u6216\u4e4b\u540e\uff0c\u89e6\u53d1\u5e76\u6267\u884c\u89e6\u53d1\u5668\u4e2d\u5b9a\u4e49\u7684SQL\u8bed\u53e5\u96c6\u5408\u3002\u89e6\u53d1\u5668\u7684\u8fd9\u79cd\u7279\u6027\u53ef\u4ee5\u534f\u52a9\u5e94\u7528\u5728\u6570\u636e\u5e93\u7aef\u786e\u4fdd\u6570\u636e\u7684\u5b8c\u6574\u6027\uff0c\u65e5\u5fd7\u8bb0\u5f55\uff0c\u6570\u636e\u6821\u9a8c\u7b49\u64cd\u4f5c<br \/>\n\u4f7f\u7528\u522b\u540d OLD \u548c NEW \u6765\u5f15\u7528\u89e6\u53d1\u5668\u4e2d\u53d1\u751f\u53d8\u5316\u7684\u8bb0\u5f55\u5185\u5bb9\uff0c\u8fd9\u4e0e\u5176\u4ed6\u7684\u6570\u636e\u5e93\u662f\u76f8\u4f3c\u7684\u3002\u73b0\u5728\u89e6\u53d1\u5668\u8fd8\u53ea\u652f\u6301\u884c\u7ea7\u89e6\u53d1\uff0c\u4e0d\u652f\u6301\u8bed\u53e5\u7ea7\u89e6\u53d1\uff08\u5373\u6539\u53d8\u4e00\u884c\u5c31\u89e6\u53d1\u4e00\u6b21\uff09<br \/>\n<img alt=\"MySql\u8fdb\u9636(\u4e8c)\u2014\u2014\u89c6\u56fe\u3001\u5b58\u50a8\u8fc7\u7a0b\u3001\u89e6\u53d1\u5668-Nick\u306e\u535a\u5ba2\" title=\"MySql\u8fdb\u9636(\u4e8c)\u2014\u2014\u89c6\u56fe\u3001\u5b58\u50a8\u8fc7\u7a0b\u3001\u89e6\u53d1\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202603\/20260305-160042-0b.png\" alt=\"20260305-160042-0b.png\" \/><\/p>\n<p>\u521b\u5efa\u89e6\u53d1\u5668<\/p>\n<pre>CREATE TRIGGER trigger_name\nBEFORE|AFTER INSERT|UPDATE|DELETE\nON tb_name FOR EACH ROW     --\u884c\u7ea7\u89e6\u53d1\u5668BEGIN\n  trigger_stmt;\nEND;<\/pre>\n<p>\u67e5\u770b\u5f53\u524d\u6570\u636e\u5e93\u4e2d\u7684\u6240\u6709\u89e6\u53d1\u5668<\/p>\n<pre>SHOW TRIGGERS;<\/pre>\n<p>\u5220\u9664<\/p>\n<pre>DROP TRIGGER [schema_name.]trigger_name;    --\u5982\u679c\u6ca1\u6709\u6307\u5b9a schema_name\uff0c\u9ed8\u8ba4\u4e3a\u5f53\u524d\u6570\u636e\u5e93<\/pre>\n<p>\u6848\u4f8b<br \/>\n\u901a\u8fc7\u89e6\u53d1\u5668\u8bb0\u5f55tb_user\u8868\u7684\u6570\u636e\u53d8\u66f4\u65e5\u5fd7\uff0c\u5c06\u53d8\u66f4\u65e5\u5fd7\u63d2\u5165\u5230\u65e5\u5fd7\u8868user_logs\u4e2d\uff0c\u5305\u542b\u589e\u52a0\u3001\u5220\u9664\u548c\u4fee\u6539<\/p>\n<p>\u5efa\u8868\u8bed\u53e5\uff1a<\/p>\n<pre>create table user_logs(\n  id int(11) not null auto_increment,\n  operation varchar(20) not null comment &#039;\u64cd\u4f5c\u7c7b\u578b, insert\/update\/delete&#039;,\n  operate_time datetime not null comment &#039;\u64cd\u4f5c\u65f6\u95f4&#039;,\n  operate_id int(11) not null comment &#039;\u64cd\u4f5c\u7684ID&#039;,\n  operate_params varchar(500) comment &#039;\u64cd\u4f5c\u53c2\u6570&#039;,\n  primary key(`id`)\n)engine=innodb default charset=utf8;<\/pre>\n<p>\u89e6\u53d1\u5668\u4ee3\u7801\uff1a<\/p>\n<pre>-- \u63d2\u5165\u6570\u636e\u89e6\u53d1\u5668\ncreate trigger tb_user_insert_trigger\n  after insert on tb_user for each row\n  begin \n  insert into user_logs(id, operation, operate_time, operate_id, operate_params)values\n  (null, &#039;insert&#039;, now(), new.id, concat(&#039;\u63d2\u5165\u7684\u6570\u636e\u5185\u5bb9\u4e3a\uff1aid=&#039;, new.id, &#039;,name=&#039;, new.name, &#039;, phone=&#039;, new.phone, &#039;, email=&#039;, new.email, &#039;, profession=&#039;, new.profession));\nend;\n\n-- \u4fee\u6539\u6570\u636e\u89e6\u53d1\u5668\ncreate trigger tb_user_update_trigger\n  after update on tb_user for each row\n  begin \n  insert into user_logs(id, operation, operate_time, operate_id, operate_params)values\n  (null, &#039;update&#039;, now(), new.id, \n   concat(&#039;\u66f4\u65b0\u4e4b\u524d\u7684\u6570\u636e\uff1aid=&#039;, old.id, &#039;,name=&#039;, old.name, &#039;, phone=&#039;, old.phone, &#039;, email=&#039;, old.email, &#039;, profession=&#039;, old.profession,\n    &#039;\u66f4\u65b0\u4e4b\u540e\u7684\u6570\u636e\uff1aid=&#039;, new.id, &#039;,name=&#039;, new.name, &#039;, phone=&#039;, new.phone, &#039;, email=&#039;, new.email, &#039;, profession=&#039;, new.profession));\nend;\n\n-- \u5220\u9664\u6570\u636e\u89e6\u53d1\u5668\ncreate trigger tb_user_delete_trigger\n  after delete on tb_user for each row\n  begin \n  insert into user_logs(id, operation, operate_time, operate_id, operate_params)values\n  (null, &#039;insert&#039;, now(), old.id, \n   concat(&#039;\u5220\u9664\u4e4b\u524d\u7684\u6570\u636e\uff1aid=&#039;, new.id, &#039;,name=&#039;, old.name, &#039;, phone=&#039;, old.phone, &#039;, email=&#039;, old.email, &#039;, profession=&#039;, old.profession));\nend;<\/pre>\n","excerpt":"<p>\u89c6\u56fe \u89c6\u56fe(View)\u662f\u4e00\u79cd\u865a\u62df\u5b58\u5728\u7684\u8868\u3002\u89c6\u56fe\u4e2d\u7684\u6570\u636e\u5e76\u4e0d\u5728\u6570\u636e\u5e93\u4e2d\u5b9e\u9645\u5b58\u5728\uff0c\u884c\u548c\u5217\u6570\u636e\u6765\u81ea\u5b9a\u4e49\u89c6\u56fe\u7684\u67e5\u8be2\u4e2d\u4f7f\u7528\u7684\u8868\uff0c\u5e76\u4e14\u662f\u5728\u4f7f\u7528\u89c6\u56fe\u65f6\u52a8\u6001\u751f\u6210\u7684\u3002 \u901a\u4fd7\u7684\u8bb2\uff0c\u89c6\u56fe\u53ea\u4fdd\u5b58\u4e86\u67e5\u8be2\u7684SQL\u903b\u8f91\uff0c\u4e0d\u4fdd\u5b58\u67e5\u8be2\u7ed3\u679c\u3002\u6240\u4ee5\u6211\u4eec\u5728\u521b\u5efa\u89c6\u56fe\u7684\u65f6\u5019\uff0c\u4e3b\u8981\u7684\u5de5\u4f5c\u5c31\u843d &#8230;<\/p>\n","date":"2026-02-25 16:38:50","modified":"2026-03-05 17:07:30","categories":[{"id":64,"slug":"mysql","title":"MySql","description":"","parent":63,"post_count":10},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":65,"slug":"mysql","title":"MySql","description":"","post_count":14},{"id":31,"slug":"%e6%95%b0%e6%8d%ae%e5%ba%93","title":"\u6570\u636e\u5e93","description":"","post_count":33}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2021\/08\/mysql.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"bpu":["1|20260305"],"views":["247"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2909,"type":"post","slug":"juc%e5%b9%b6%e5%8f%91%e7%bc%96%e7%a8%8b%e4%b9%9d-future%e5%92%8ccallable%e8%8e%b7%e5%8f%96%e5%ad%90%e7%ba%bf%e7%a8%8b%e7%bb%93%e6%9e%9c","url":"https:\/\/qkongtao.cn\/?p=2909","status":"publish","title":"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)","title_plain":"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)","content":"<h2 id=\"h2-0\">Callable\u548cFuture\u7684\u4ecb\u7ecd<\/h2>\n<p>Runnable\u7684\u7f3a\u9677<\/p>\n<ol>\n<li>\u4e0d\u80fd\u8fd4\u56de\u4e00\u4e2a\u8fd4\u56de\u503c<\/li>\n<li>\u4e5f\u4e0d\u80fd\u629b\u51fachecked Exception<\/li>\n<\/ol>\n<p>Callable\u63a5\u53e3<\/p>\n<ul>\n<li>\u7c7b\u4f3c\u4e8eRunnable\uff0c\u88ab\u5176\u5b83\u7ebf\u7a0b\u6267\u884c\u7684\u4efb\u52a1<\/li>\n<li>\u5b9e\u73b0call\u65b9\u6cd5<\/li>\n<li>\u6709\u8fd4\u56de\u503c<\/li>\n<\/ul>\n<p>Future\u7684\u4f5c\u7528<br \/>\n\u6838\u5fc3\u601d\u60f3\u662f\u521b\u5efa\u4e00\u4e2a\u5b50\u7ebf\u7a0b\u6267\u884c\u4e00\u4e2a\u4e8b\u4ef6\uff0c\u4e3b\u7ebf\u7a0b\u4e0d\u9700\u8981\u7b49\u5f85\u8be5\u4e8b\u4ef6\u7684\u6267\u884c\uff0c\u4f46\u662f\u4e3b\u7ebf\u7a0b\u53ef\u4ee5\u968f\u65f6\u62ff\u5230\u5b50\u7ebf\u7a0b\u7684\u6267\u884c\u7ed3\u679c\u3002<\/p>\n<p>Callable\u548cFuture\u7684\u5173\u7cfb<\/p>\n<ol>\n<li>\u6211\u4eec\u53ef\u4ee5\u7528Future.get\u6765\u83b7\u53d6Callable\u63a5\u53e3\u8fd4\u56de\u7684\u6267\u884c\u7ed3\u679c\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7Future.isDone()\u6765\u5224\u65ad\u4efb\u52a1\u662f\u5426\u5df2\u7ecf\u6267\u884c\u5b8c\u4e86\uff0c\u4ee5\u53ca\u53d6\u6d88\u8fd9\u4e2a\u4efb\u52a1\uff0c\u9650\u65f6\u83b7\u53d6\u4efb\u52a1\u7684\u7ed3\u679c\u7b49<\/li>\n<li>\u5728call()\u672a\u6267\u884c\u5b8c\u6bd5\u4e4b\u524d\uff0c\u8c03\u7528get()\u7684\u7ebf\u7a0b\uff08\u5047\u5b9a\u6b64\u65f6\u662f\u4e3b\u7ebf\u7a0b\uff09\u4f1a\u88ab\u963b\u585e\uff0c\u76f4\u5230call()\u65b9\u6cd5\u8fd4\u56de\u4e86\u7ed3\u679c\u540e\uff0c\u6b64\u65f6future.get()\u624d\u4f1a\u5f97\u5230\u8be5\u7ed3\u679c\uff0c\u7136\u540e\u4e3b\u7ebf\u7a0b\u624d\u4f1a\u5207\u6362\u5230runnable\u72b6\u6001<\/li>\n<li>\u6240\u4ee5Future\u662f\u4e00\u4e2a\u5b58\u50a8\u5668\uff0c\u5b83\u5b58\u50a8\u4e86call()\u8fd9\u4e2a\u4efb\u52a1\u7684\u7ed3\u679c\u800c\u8fd9\u4e2a\u4efb\u52a1\u7684\u6267\u884c\u65f6\u95f4\u662f\u65e0\u6cd5\u63d0\u524d\u786e\u5b9a\u7684\uff0c\u56e0\u4e3a\u8fd9\u5b8c\u5168\u53d6\u51b3\u4e8ecall()\u65b9\u6cd5\u6267\u884c\u7684\u60c5\u51b5<\/li>\n<\/ol>\n<h2 id=\"h2-1\">Future\u7684\u4e3b\u8981\u65b9\u6cd5<\/h2>\n<ol>\n<li>\n<p>get()\u65b9\u6cd5\uff1a\u83b7\u53d6\u7ed3\u679c<br \/>\nget\u65b9\u6cd5\u7684\u884c\u4e3a\u53d6\u51b3\u4e8eCallable\u4efb\u52a1\u7684\u72b6\u6001\uff0c\u53ea\u6709\u4ee5\u4e0b\u8fd95\u79cd\u60c5\u51b5\uff1a<\/p>\n<\/li>\n<li>\n<p>\u4efb\u52a1\u6b63\u5e38\u5b8c\u6210\uff1aget\u65b9\u6cd5\u4f1a\u7acb\u523b\u8fd4\u56de\u7ed3\u679c<\/p>\n<\/li>\n<li>\n<p>\u4efb\u52a1\u5c1a\u672a\u5b8c\u6210\uff08\u4efb\u52a1\u8fd8\u6ca1\u5f00\u59cb\u6216\u8fdb\u884c\u4e2d\uff09\uff1aget\u5c06\u963b\u585e\u5e76\u76f4\u81f3\u4efb\u52a1\u5b8c\u6210\u3002<\/p>\n<\/li>\n<li>\n<p>\u4efb\u52a1\u6267\u884c\u8fc7\u7a0b\u4e2d\u629b\u51faException\uff1aget\u65b9\u6cd5\u4f1a\u629b\u51faExecutionException\uff1a\u8fd9\u91cc\u7684\u629b\u51fa\u5f02\u5e38\uff0c\u662fcall()\u6267\u884c\u65f6\u4ea7\u751f\u7684\u90a3\u4e2a\u5f02\u5e38\uff0c\u770b\u5230\u8fd9\u4e2a\u5f02\u5e38\u7c7b\u578b\u662fjava.util.concurrent.ExecutionException\u3002\u4e0d\u8bbacall0\u6267\u884c\u65f6\u629b\u51fa\u7684\u5f02\u5e38\u7c7b\u578b\u662f\u4ec0\u4e48\uff0c\u6700\u540eget\u65b9\u6cd5\u629b\u51fa\u7684\u5f02\u5e38\u7c7b\u578b\u90fd\u662fExecutionException\u3002<\/p>\n<\/li>\n<li>\n<p>\u4efb\u52a1\u88ab\u53d6\u6d88\uff1aget\u65b9\u6cd5\u4f1a\u629b\u51faCancellationException<br \/>\n5.\u4efb\u52a1\u8d85\u65f6\uff1aget\u65b9\u6cd5\u6709\u4e00\u4e2a\u91cd\u8f7d\u65b9\u6cd5\uff0c\u662f\u4f20\u5165\u4e00\u4e2a\u5ef6\u8fdf\u65f6\u95f4\u7684\uff0c\u5982\u679c\u65f6\u95f4\u5230\u4e86\u8fd8\u6ca1\u6709\u83b7\u5f97\u7ed3\u679c\uff0cget\u65b9\u6cd5\u5c31\u4f1a\u629b\u51faTimeoutException\u3002<\/p>\n<\/li>\n<li>\n<p>get(long timeout, TimeUnit unit)\uff1a\u6709\u8d85\u65f6\u7684\u83b7\u53d6<br \/>\n\u7528get(long timeout, TimeUnit unit)\u65b9\u6cd5\u65f6\uff0c\u5982\u679ccall()\u5728\u89c4\u5b9a\u65f6\u95f4\u5185\u5b8c\u6210\u4e86\u4efb\u52a1\uff0c\u90a3\u4e48\u5c31\u4f1a\u6b63\u5e38\u83b7\u53d6\u5230\u8fd4\u56de\u503c\uff1b\u800c\u5982\u679c\u518d\u6307\u5b9a\u65f6\u95f4\u5185\u6ca1\u6709\u8ba1\u7b97\u51fa\u7ed3\u679c\uff0c\u90a3\u4e48\u5c31\u4f1a\u629b\u51faTimeoutException<br \/>\n\u8d85\u65f6\u4e0d\u83b7\u53d6\uff0c\u4efb\u52a1\u9700\u53d6\u6d88<\/p>\n<\/li>\n<li>\n<p>cancel\u65b9\u6cd5<br \/>\n\u53d6\u6d88\u4efb\u52a1\u7684\u6267\u884c<\/p>\n<\/li>\n<\/ol>\n<ul>\n<li>\u5982\u679c\u8fd9\u4e2a\u4efb\u52a1\u8fd8\u6ca1\u6709\u5f00\u59cb\u6267\u884c\uff0c\u90a3\u4e48\u8fd9\u79cd\u60c5\u51b5\u6700\u7b80\u5355\uff0c\u4efb\u52a1\u4f1a\u88ab\u6b63\u5e38\u7684\u53d6\u6d88\uff0c\u672a\u6765\u4e5f\u4e0d\u4f1a\u88ab\u6267\u884c\uff0c\u65b9\u6cd5\u8fd4\u56detrue\u3002<\/li>\n<li>\u5982\u679c\u4efb\u52a1\u5df2\u5b8c\u6210\uff0c\u6216\u8005\u5df2\u53d6\u6d88\uff1a\u90a3\u4e48cancel()\u65b9\u6cd5\u4f1a\u6267\u884c\u5931\u8d25\uff0c\u65b9\u6cd5\u8fd4\u56defalse.<\/li>\n<li>\u5982\u679c\u8fd9\u4e2a\u4efb\u52a1\u5df2\u7ecf\u5f00\u59cb\u6267\u884c\u4e86\uff0c\u90a3\u4e48\u8fd9\u4e2a\u53d6\u6d88\u65b9\u6cd5\u5c06\u4e0d\u4f1a\u76f4\u63a5\u53d6\u6d88\u8be5\u4efb\u52a1\uff0c\u800c\u662f\u4f1a\u6839\u636e\u6211\u4eec\u586b\u7684\u53c2\u6570maylnterruptlfRunning\u505a\u5224\u65ad\u3002<\/li>\n<\/ul>\n<p>Future.cancel(true)\u9002\u7528\u4e8e\uff1a<br \/>\n1).\u4efb\u52a1\u80fd\u591f\u5904\u7406interrupt<\/p>\n<p>Future.cancel(false) \u4ec5\u7528\u4e8e\u907f\u514d\u542f\u52a8\u5c1a\u672a\u542f\u52a8\u7684\u4efb\u52a1\uff0c\u9002\u7528\u4e8e\uff1a<br \/>\n1).\u672a\u80fd\u5904\u7406interrupt\u7684\u4efb\u52a1<br \/>\n2).\u4e0d\u6e05\u695a\u4efb\u52a1\u662f\u5426\u652f\u6301\u53d6\u6d88<br \/>\n3).\u9700\u8981\u7b49\u5f85\u5df2\u7ecf\u5f00\u59cb\u7684\u4efb\u52a1\u6267\u884c\u5b8c\u6210<\/p>\n<ol start=\"4\">\n<li>isDone()\u65b9\u6cd5\uff1a\u5224\u65ad\u7ebf\u7a0b\u662f\u5426\u6267\u884c\u5b8c\u6bd5<\/li>\n<li>isCancelled()\u65b9\u6cd5\uff1a\u5224\u65ad\u662f\u5426\u88ab\u53d6\u6d88<\/li>\n<\/ol>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-212421-xW.png\" alt=\"20260225-212421-xW.png\" \/><\/p>\n<h3 id=\"h3-2\">\u7528\u6cd51\uff1a\u7ebf\u7a0b\u6c60\u7684submit\u65b9\u6cd5\u8fd4\u56deFuture\u5bf9\u8c61<\/h3>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u8981\u7ed9\u7ebf\u7a0b\u6c60\u63d0\u4ea4\u6211\u4eec\u7684\u4efb\u52a1\uff0c\u63d0\u4ea4\u65f6\u7ebf\u7a0b\u6c60\u4f1a\u7acb\u523b\u8fd4\u56de\u7ed9\u6211\u4eec\u4e00\u4e2a\u7a7a\u7684Future\u5bb9\u5668\u3002\u5f53\u7ebf\u7a0b\u7684\u4efb\u52a1\u2014\u65e6\u6267\u884c\u5b8c\u6bd5\uff0c\u4e5f\u5c31\u662f\u5f53\u6211\u4eec\u53ef\u4ee5\u83b7\u53d6\u7ed3\u679c\u7684\u65f6\u5019\uff0c\u7ebf\u7a0b\u6c60\u4fbf\u4f1a\u628a\u8be5\u7ed3\u679c\u586b\u5165\u5230\u4e4b\u524d\u7ed9\u6211\u4eec\u7684\u90a3\u4e2aFuture\u4e2d\u53bb\uff08\u800c\u4e0d\u662f\u521b\u5efa\u4e00\u4e2a\u65b0\u7684Future\uff09\uff0c\u6211\u4eec\u6b64\u65f6\u4fbf\u53ef\u4ee5\u4ece\u8be5Future\u4e2d\u83b7\u5f97\u4efb\u52a1\u6267\u884c\u7684\u7ed3\u679c<\/p>\n<pre>package future;\n\nimport java.util.Random;\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.Future;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u4e00\u4e2aFuture\u7684\u4f7f\u7528\u65b9\u6cd5\n *\/\npublic class OneFuture {\n\n    public static void main(String[] args) {\n        ExecutorService service = Executors.newFixedThreadPool(10);\n        Future&lt;Integer&gt; future = service.submit(new CallableTask());\n        System.out.println(&quot;\u53ef\u4ee5\u5148\u505a\u5176\u4ed6\u64cd\u4f5c\uff0c\uff0c\uff0c&quot;);\n        try {\n            System.out.println(future.get());\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } catch (ExecutionException e) {\n            e.printStackTrace();\n        }\n        service.shutdown();\n    }\n\n    static class CallableTask implements Callable&lt;Integer&gt; {\n\n        @Override\n        public Integer call() throws Exception {\n            Thread.sleep(3000);\n            return new Random().nextInt();\n        }\n    }\n}<\/pre>\n<p>lambda\u5f62\u5f0f\u6216\u8005\u533f\u540d\u51fd\u6570\u5f62\u5f0f<\/p>\n<pre>package future;\n\nimport java.util.Random;\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.Future;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u4e00\u4e2aFuture\u7684\u4f7f\u7528\u65b9\u6cd5,lambda\u5f62\u5f0f\n *\/\npublic class OneFutureLambda {\n\n    public static void main(String[] args) {\n        ExecutorService service = Executors.newFixedThreadPool(10);\n        Callable&lt;Integer&gt; callable = () -&gt; {\n            Thread.sleep(3000);\n            return new Random().nextInt();\n        };\n        Future&lt;Integer&gt; future = service.submit(callable);\n        System.out.println(&quot;\u53ef\u4ee5\u5148\u505a\u5176\u4ed6\u64cd\u4f5c\uff0c\uff0c\uff0c&quot;);\n        try {\n            System.out.println(future.get());\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } catch (ExecutionException e) {\n            e.printStackTrace();\n        }\n        service.shutdown();\n    }\n\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-214224-l9.png\" alt=\"20260225-214224-l9.png\" \/><\/p>\n<p>\u6848\u4f8b\uff1aget\u7684\u8d85\u65f6\u65b9\u6cd5\u540e\u5904\u7406\uff0ccancel\u4f20\u5165true\u548cfalse\u7684\u533a\u522b<\/p>\n<pre>package future;\n\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.Future;\nimport java.util.concurrent.TimeUnit;\nimport java.util.concurrent.TimeoutException;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793aget\u7684\u8d85\u65f6\u65b9\u6cd5\uff0c\u9700\u8981\u6ce8\u610f\u8d85\u65f6\u540e\u5904\u7406\uff0c\u8c03\u7528future.cancel()\u3002\u6f14\u793acancel\u4f20\u5165true\u548cfalse\u7684\u533a\u522b\uff0c\u4ee3\u8868\u662f\u5426\u4e2d\u65ad\u6b63\u5728\u6267\u884c\u7684\u4efb\u52a1\u3002\n *\/\npublic class Timeout {\n\n    private static final Ad DEFAULT_AD = new Ad(&quot;\u65e0\u7f51\u7edc\u65f6\u5019\u7684\u9ed8\u8ba4\u5e7f\u544a&quot;);\n    private static final ExecutorService exec = Executors.newFixedThreadPool(10);\n\n    static class Ad {\n\n        String name;\n\n        public Ad(String name) {\n            this.name = name;\n        }\n\n        @Override\n        public String toString() {\n            return &quot;Ad{&quot; +\n                    &quot;name=&#039;&quot; + name + &#039;\\&#039;&#039; +\n                    &#039;}&#039;;\n        }\n    }\n\n    static class FetchAdTask implements Callable&lt;Ad&gt; {\n\n        @Override\n        public Ad call() throws Exception {\n            try {\n                Thread.sleep(3000);\n            } catch (InterruptedException e) {\n                System.out.println(&quot;sleep\u671f\u95f4\u88ab\u4e2d\u65ad\u4e86&quot;);\n                return new Ad(&quot;\u88ab\u4e2d\u65ad\u65f6\u5019\u7684\u9ed8\u8ba4\u5e7f\u544a&quot;);\n            }\n            return new Ad(&quot;\u65c5\u6e38\u8ba2\u7968\u54ea\u5bb6\u5f3a\uff1f\u627e\u67d0\u7a0b&quot;);\n        }\n    }\n\n    public void printAd() {\n        Future&lt;Ad&gt; f = exec.submit(new FetchAdTask());\n        Ad ad;\n        try {\n            ad = f.get(2000, TimeUnit.MILLISECONDS);\n        } catch (InterruptedException e) {\n            ad = new Ad(&quot;\u88ab\u4e2d\u65ad\u65f6\u5019\u7684\u9ed8\u8ba4\u5e7f\u544a&quot;);\n        } catch (ExecutionException e) {\n            ad = new Ad(&quot;\u5f02\u5e38\u65f6\u5019\u7684\u9ed8\u8ba4\u5e7f\u544a&quot;);\n        } catch (TimeoutException e) {\n            ad = new Ad(&quot;\u8d85\u65f6\u65f6\u5019\u7684\u9ed8\u8ba4\u5e7f\u544a&quot;);\n            System.out.println(&quot;\u8d85\u65f6\uff0c\u672a\u83b7\u53d6\u5230\u5e7f\u544a&quot;);\n            boolean cancel = f.cancel(true);\n            System.out.println(&quot;cancel\u7684\u7ed3\u679c\uff1a&quot; + cancel);\n        }\n        exec.shutdown();\n        System.out.println(ad);\n    }\n\n    public static void main(String[] args) {\n        Timeout timeout = new Timeout();\n        timeout.printAd();\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-221357-lr.png\" alt=\"20260225-221357-lr.png\" \/><br \/>\n\u53ef\u4ee5\u770b\u5230\uff0ccancel\u4f20true\u7684\u65f6\u5019\uff0c\u7ebf\u7a0b\u88ab\u4e2d\u65ad\u4e86\u3002<\/p>\n<h3 id=\"h3-3\">\u7528\u6cd52\uff1a\u7528FutureTask\u6765\u521b\u5efaFuture<\/h3>\n<p>FutureTask<br \/>\n\u6240\u4ee5\u5b83\u65e2\u53ef\u4ee5\u4f5c\u4e3aRunnable\u88ab\u7ebf\u7a0b\u6267\u884c\uff0c\u53c8\u53ef\u4ee5\u4f5c\u4e3aFuture<br \/>\n\u5f97\u5230Callable\u7684\u8fd4\u56de\u503c<\/p>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e5d)\u2014\u2014Future\u548cCallable(\u83b7\u53d6\u5b50\u7ebf\u7a0b\u7ed3\u679c)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-222757-Iy.png\" alt=\"20260225-222757-Iy.png\" \/><\/p>\n<p>\u628aCallable\u5b9e\u4f8b\u5f53\u4f5c\u53c2\u6570\uff0c\u751f\u6210FutureTask\u7684\u5bf9\u8c61\uff0c\u7136\u540e\u628a\u8fd9\u4e2a\u5bf9\u8c61\u5f53\u4f5c\u4e00\u4e2aRunnable\u5bf9\u8c61\uff0c\u7528\u7ebf\u7a0b\u6c60\u6216\u53e6\u8d77\u7ebf\u7a0b\u53bb\u6267\u884c\u8fd9\u4e2aRunnable\u5bf9\u8c61\uff0c\u6700\u540e\u901a\u8fc7FutureTask\u83b7\u53d6\u521a\u624d\u6267\u884c\u7684\u7ed3\u679c<\/p>\n<p><strong>Future\u548cFutureTask\u533a\u522b<\/strong><br \/>\nFuture \u662f\u4e00\u4e2a\u63a5\u53e3\uff0c\u7528\u4e8e\u8868\u793a\u5f02\u6b65\u8ba1\u7b97\u7684\u7ed3\u679c\uff0c\u4e0d\u80fd\u76f4\u63a5\u5b9e\u4f8b\u5316\uff0c\u901a\u5e38\u7531\u7ebf\u7a0b\u6c60\u7684 submit() \u65b9\u6cd5\u8fd4\u56de\u3002<br \/>\nFutureTask \u662f Future \u7684\u4e00\u4e2a\u5177\u4f53\u5b9e\u73b0\u7c7b\uff0c\u5b83\u65e2\u53ef\u4ee5\u4f5c\u4e3a\u4efb\u52a1\u6267\u884c\uff0c\u4e5f\u53ef\u4ee5\u83b7\u53d6\u4efb\u52a1\u7684\u6267\u884c\u7ed3\u679c\u3002\u5b83\u662f Runnable \u548c Future \u7684\u7ed3\u5408\u4f53\uff0c\u63d0\u4f9b\u4e86\u66f4\u7075\u6d3b\u7684\u4f7f\u7528\u65b9\u5f0f\u3002<\/p>\n<p>FutureTask\u7684\u7528\u6cd5<\/p>\n<pre>package future;\n\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.FutureTask;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793aFutureTask\u7684\u7528\u6cd5\n *\/\npublic class FutureTaskDemo {\n\n    public static void main(String[] args) {\n        Task task = new Task();\n        FutureTask&lt;Integer&gt; integerFutureTask = new FutureTask&lt;&gt;(task);\n\/\/        new Thread(integerFutureTask).start();\n        ExecutorService service = Executors.newCachedThreadPool();\n        service.submit(integerFutureTask);\n\n        try {\n            System.out.println(&quot;task\u8fd0\u884c\u7ed3\u679c\uff1a&quot;+integerFutureTask.get());\n\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } catch (ExecutionException e) {\n            e.printStackTrace();\n        }\n    }\n}\n\nclass Task implements Callable&lt;Integer&gt; {\n\n    @Override\n    public Integer call() throws Exception {\n        System.out.println(&quot;\u5b50\u7ebf\u7a0b\u6b63\u5728\u8ba1\u7b97&quot;);\n        Thread.sleep(3000);\n        int sum = 0;\n        for (int i = 0; i &lt; 100; i++) {\n            sum += i;\n        }\n        return sum;\n    }\n}<\/pre>\n<h2 id=\"h2-4\">Future\u7684\u6ce8\u610f\u70b9<\/h2>\n<ol>\n<li>\n<p>\u5f53for\u5faa\u73af\u6279\u91cf\u83b7\u53d6future\u7684\u7ed3\u679c\u65f6\uff0c\u5bb9\u6613\u53d1\u751f\u4e00\u90e8\u5206\u7ebf\u7a0b\u5f88\u6162\u7684\u60c5\u51b5\uff0cget\u65b9\u6cd5\u8c03\u7528\u65f6\u5e94\u4f7f\u7528timeout\u9650\u5236<\/p>\n<\/li>\n<li>\n<p>Future\u7684\u751f\u547d\u5468\u671f\u4e0d\u80fd\u540e\u9000,\u751f\u547d\u5468\u671f\u53ea\u80fd\u524d\u8fdb\uff0c\u4e0d\u80fd\u540e\u9000\u3002\u5c31\u548c\u7ebf\u7a0b\u6c60\u7684\u751f\u547d\u5468\u671f\u4e00\u6837\uff0c\u4e00\u65e6\u5b8c\u5168\u5b8c\u6210\u4e86\u4efb\u52a1\uff0c\u5b83\u5c31\u6c38\u4e45\u505c\u5728\u4e86\u201c\u5df2\u5b8c\u6210\u201d\u7684\u72b6\u6001\uff0c\u4e0d\u80fd\u91cd\u5934\u518d\u6765<\/p>\n<\/li>\n<\/ol>\n","excerpt":"<p>Callable\u548cFuture\u7684\u4ecb\u7ecd Runnable\u7684\u7f3a\u9677 \u4e0d\u80fd\u8fd4\u56de\u4e00\u4e2a\u8fd4\u56de\u503c \u4e5f\u4e0d\u80fd\u629b\u51fachecked Exception Callable\u63a5\u53e3 \u7c7b\u4f3c\u4e8eRunnable\uff0c\u88ab\u5176\u5b83\u7ebf\u7a0b\u6267\u884c\u7684\u4efb\u52a1 \u5b9e\u73b0call\u65b9\u6cd5 \u6709\u8fd4\u56de\u503c Future\u7684\u4f5c\u7528 \u6838\u5fc3\u601d\u60f3\u662f\u521b\u5efa\u4e00\u4e2a\u5b50\u7ebf\u7a0b\u6267\u884c\u4e00\u4e2a\u4e8b\u4ef6\uff0c\u4e3b\u7ebf\u7a0b\u4e0d\u9700\u8981\u7b49\u5f85\u8be5\u4e8b\u4ef6\u7684 &#8230;<\/p>\n","date":"2025-09-13 01:58:46","modified":"2026-03-05 17:06:38","categories":[{"id":80,"slug":"java","title":"java","description":"","parent":63,"post_count":45},{"id":231,"slug":"juc","title":"JUC","description":"","parent":80,"post_count":9},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":82,"slug":"java","title":"java","description":"","post_count":66},{"id":232,"slug":"juc","title":"JUC","description":"","post_count":9}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"views":["233"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2907,"type":"post","slug":"juc%e5%b9%b6%e5%8f%91%e7%bc%96%e7%a8%8b%e5%85%ab-aqs%e5%b9%b6%e5%8f%91%e7%81%b5%e9%ad%82","url":"https:\/\/qkongtao.cn\/?p=2907","status":"publish","title":"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)","title_plain":"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)","content":"<h2 id=\"h2-0\">AQS\u4ecb\u7ecd<\/h2>\n<p>\u5728 Java \u5e76\u53d1\u7f16\u7a0b\u4e2d\uff0cAbstractQueuedSynchronizer\uff08AQS\uff09\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u7ec4\u4ef6\u3002AQS \u662f JDK \u63d0\u4f9b\u7684\u4e00\u4e2a\u6846\u67b6\uff0c\u7528\u4e8e\u5b9e\u73b0\u57fa\u4e8e FIFO\uff08First In, First Out\uff09\u7b49\u5f85\u961f\u5217\u7684\u963b\u585e\u9501\u548c\u540c\u6b65\u5668\uff0c\u4f8b\u5982 ReentrantLock\u3001Semaphore\u3001CountDownLatch \u7b49\u3002\u672c\u6587\u5c06\u4ece\u591a\u4e2a\u89d2\u5ea6\u6df1\u5165\u89e3\u6790 AQS \u7684\u5de5\u4f5c\u539f\u7406\u53ca\u5176\u5728\u5e76\u53d1\u7f16\u7a0b\u4e2d\u7684\u5e94\u7528\u3002<\/p>\n<p>AQS \u662f\u4e00\u4e2a\u62bd\u8c61\u7c7b\uff0c\u5b83\u5b9a\u4e49\u4e86\u4e00\u5957\u591a\u7ebf\u7a0b\u8bbf\u95ee\u5171\u4eab\u8d44\u6e90\u7684\u540c\u6b65\u673a\u5236\u3002\u5176\u6838\u5fc3\u601d\u60f3\u662f\uff1a\u5982\u679c\u88ab\u8bf7\u6c42\u7684\u5171\u4eab\u8d44\u6e90\u7a7a\u95f2\uff0c\u5219\u5c06\u5f53\u524d\u8bf7\u6c42\u8d44\u6e90\u7684\u7ebf\u7a0b\u8bbe\u7f6e\u4e3a\u6709\u6548\u7684\u5de5\u4f5c\u7ebf\u7a0b\uff0c\u5e76\u4e14\u5c06\u5171\u4eab\u8d44\u6e90\u8bbe\u7f6e\u4e3a\u9501\u5b9a\u72b6\u6001\uff1b\u5982\u679c\u88ab\u8bf7\u6c42\u7684\u5171\u4eab\u8d44\u6e90\u88ab\u5360\u7528\uff0c\u5219\u5c06\u5f53\u524d\u7ebf\u7a0b\u52a0\u5165\u5230\u7b49\u5f85\u961f\u5217\u4e2d\uff0c\u5e76\u6302\u8d77\u76f4\u5230\u88ab\u5524\u9192\u3002<\/p>\n<h3 id=\"h3-1\">AQS\u6838\u5fc3\u529f\u80fd<\/h3>\n<p>AQS \u662f\u4e00\u4e2a\u7528\u4e8e\u6784\u5efa\u9501\u548c\u540c\u6b65\u5668\u7684\u57fa\u7840\u6846\u67b6\uff0c\u5b83\u901a\u8fc7\u4e00\u4e2a\u5148\u8fdb\u5148\u51fa\u7684\u7b49\u5f85\u961f\u5217\u7ba1\u7406\u591a\u4e2a\u7ebf\u7a0b\u7684\u540c\u6b65\u64cd\u4f5c\u3002AQS \u63d0\u4f9b\u4e86\u4ee5\u4e0b\u6838\u5fc3\u529f\u80fd\uff1a<\/p>\n<ol>\n<li>\u8d44\u6e90\u72b6\u6001\u7ba1\u7406\uff1a\u901a\u8fc7\u4e00\u4e2a\u6574\u6570\u8868\u793a\u540c\u6b65\u72b6\u6001\uff0c\u5b50\u7c7b\u53ef\u4ee5\u5b9a\u4e49\u8be5\u72b6\u6001\u7684\u610f\u4e49\u548c\u64cd\u4f5c\u65b9\u5f0f\u3002<\/li>\n<li>\u7ebf\u7a0b\u6392\u961f\u7ba1\u7406\uff1a\u901a\u8fc7 FIFO \u7b49\u5f85\u961f\u5217\u7ba1\u7406\u591a\u4e2a\u7ebf\u7a0b\u7684\u7ade\u4e89\u548c\u7b49\u5f85\u3002<\/li>\n<li>\u63d0\u4f9b\u6a21\u677f\u65b9\u6cd5\uff1aAQS \u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u6a21\u677f\u65b9\u6cd5\uff0c\u5b50\u7c7b\u53ef\u4ee5\u901a\u8fc7\u5b9e\u73b0\u8fd9\u4e9b\u65b9\u6cd5\u6765\u5b9a\u4e49\u5177\u4f53\u7684\u540c\u6b65\u673a\u5236\u3002<\/li>\n<\/ol>\n<h3 id=\"h3-2\">AQS \u8bbe\u8ba1\u7406\u5ff5<\/h3>\n<p>AQS \u7684\u8bbe\u8ba1\u7406\u5ff5\u662f\u5c06\u540c\u6b65\u72b6\u6001\u548c\u7ebf\u7a0b\u961f\u5217\u7684\u7ba1\u7406\u903b\u8f91\u62bd\u8c61\u51fa\u6765\uff0c\u4ee5\u4fbf\u4e0d\u540c\u7c7b\u578b\u7684\u540c\u6b65\u5668\u53ef\u4ee5\u91cd\u7528\u8fd9\u4e9b\u903b\u8f91\u3002\u8fd9\u6837\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u96c6\u4e2d\u7cbe\u529b\u4e8e\u5177\u4f53\u7684\u540c\u6b65\u5668\u903b\u8f91\u5b9e\u73b0\uff0c\u800c\u65e0\u9700\u5173\u5fc3\u5e95\u5c42\u7684\u7ebf\u7a0b\u6392\u961f\u548c\u72b6\u6001\u7ba1\u7406\u7ec6\u8282\u3002<\/p>\n<h3 id=\"h3-3\">AQS \u7684\u5de5\u4f5c\u539f\u7406<\/h3>\n<h4>\u540c\u6b65\u72b6\u6001<\/h4>\n<p>AQS \u4f7f\u7528\u4e00\u4e2a volatile \u7c7b\u578b\uff08\u591a\u7ebf\u7a0b\u53ef\u89c1 \uff09\u7684\u6574\u6570\u53d8\u91cf\uff08state\uff09\u6765\u8868\u793a\u540c\u6b65\u72b6\u6001\u3002\u8fd9\u4e2a\u72b6\u6001\u53ef\u4ee5\u7531\u5b50\u7c7b\u5b9a\u4e49\u5176\u5177\u4f53\u610f\u4e49\uff0c\u4f8b\u5982\uff1a<\/p>\n<ul>\n<li>\u5bf9\u4e8e\u72ec\u5360\u9501\uff0cstate \u8868\u793a\u9501\u7684\u6301\u6709\u72b6\u6001\uff080 \u8868\u793a\u672a\u6301\u6709\uff0c1 \u8868\u793a\u6301\u6709\uff09\u3002<\/li>\n<li>\u5bf9\u4e8e\u5171\u4eab\u9501\uff0cstate \u8868\u793a\u5f53\u524d\u6301\u6709\u7684\u8bfb\u9501\u6570\u91cf\u3002<br \/>\nAQS \u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u7684\u65b9\u6cd5\u6765\u64cd\u4f5c\u540c\u6b65\u72b6\u6001\uff0c\u5982 getState()\u3001setState(int newState) \u548c compareAndSetState(int expect, int update)\u3002<\/li>\n<\/ul>\n<h4>\u7b49\u5f85\u961f\u5217<\/h4>\n<p>AQS \u4f7f\u7528\u4e00\u4e2a FIFO \u7b49\u5f85\u961f\u5217\u6765\u7ba1\u7406\u5904\u4e8e\u7b49\u5f85\u72b6\u6001\u7684\u7ebf\u7a0b\u3002\u5f53\u7ebf\u7a0b\u8bf7\u6c42\u65e0\u6cd5\u83b7\u53d6\u540c\u6b65\u72b6\u6001\u65f6\uff0c\u4f1a\u88ab\u52a0\u5165\u7b49\u5f85\u961f\u5217\u3002\u7b49\u5f85\u961f\u5217\u7531\u4e00\u4e2a\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\uff0c\u6bcf\u4e2a\u8282\u70b9\uff08Node\uff09\u8868\u793a\u4e00\u4e2a\u7b49\u5f85\u7ebf\u7a0b\u3002<\/p>\n<h4>\u6a21\u677f\u65b9\u6cd5<\/h4>\n<p>AQS \u63d0\u4f9b\u4e86\u4ee5\u4e0b\u51e0\u4e2a\u6a21\u677f\u65b9\u6cd5\uff0c\u5b50\u7c7b\u53ef\u4ee5\u901a\u8fc7\u8986\u76d6\u8fd9\u4e9b\u65b9\u6cd5\u6765\u5b9e\u73b0\u5177\u4f53\u7684\u540c\u6b65\u5668\u903b\u8f91\uff1a<\/p>\n<ol>\n<li>tryAcquire(int arg)\uff1a\u5c1d\u8bd5\u83b7\u53d6\u540c\u6b65\u72b6\u6001\u3002\u5bf9\u4e8e\u72ec\u5360\u6a21\u5f0f\uff0c\u5982\u679c\u6210\u529f\u83b7\u53d6\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false\u3002<\/li>\n<li>tryRelease(int arg)\uff1a\u5c1d\u8bd5\u91ca\u653e\u540c\u6b65\u72b6\u6001\u3002\u5bf9\u4e8e\u72ec\u5360\u6a21\u5f0f\uff0c\u5982\u679c\u6210\u529f\u91ca\u653e\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false\u3002<\/li>\n<li>tryAcquireShared(int arg)\uff1a\u5c1d\u8bd5\u5171\u4eab\u6a21\u5f0f\u4e0b\u83b7\u53d6\u540c\u6b65\u72b6\u6001\u3002\u5982\u679c\u6210\u529f\u83b7\u53d6\u8fd4\u56de\u4e00\u4e2a\u5927\u4e8e\u7b49\u4e8e 0 \u7684\u503c\uff0c\u5426\u5219\u8fd4\u56de\u4e00\u4e2a\u5c0f\u4e8e 0 \u7684\u503c\u3002<\/li>\n<li>tryReleaseShared(int arg)\uff1a\u5c1d\u8bd5\u5171\u4eab\u6a21\u5f0f\u4e0b\u91ca\u653e\u540c\u6b65\u72b6\u6001\u3002\u5982\u679c\u6210\u529f\u91ca\u653e\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false\u3002<\/li>\n<\/ol>\n<h3 id=\"h3-4\">AQS \u7684\u5e94\u7528<\/h3>\n<p>AbstractQueuedSynchronizer\u5de5\u5177\u5305\u7684\u5b9e\u73b0\u65b9\u6cd5\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-154135-09.png\" alt=\"20260225-154135-09.png\" \/><\/p>\n<h4>ReentrantLock<\/h4>\n<p>ReentrantLock \u662f\u4e00\u79cd\u57fa\u4e8e AQS \u5b9e\u73b0\u7684\u53ef\u91cd\u5165\u72ec\u5360\u9501\u3002\u5b83\u6709\u4e24\u79cd\u6a21\u5f0f\uff1a\u516c\u5e73\u6a21\u5f0f\u548c\u975e\u516c\u5e73\u6a21\u5f0f\u3002<\/p>\n<h4>\u516c\u5e73\u6a21\u5f0f<\/h4>\n<p>\u516c\u5e73\u6a21\u5f0f\u4e0b\uff0cReentrantLock \u6309\u7167\u8bf7\u6c42\u987a\u5e8f\u83b7\u53d6\u9501\u3002\u5177\u4f53\u5b9e\u73b0\u662f\u5728 tryAcquire \u65b9\u6cd5\u4e2d\u68c0\u67e5\u7b49\u5f85\u961f\u5217\u4e2d\u7684\u524d\u9a71\u8282\u70b9\uff0c\u5982\u679c\u6ca1\u6709\u524d\u9a71\u8282\u70b9\u6216\u524d\u9a71\u8282\u70b9\u7684\u7ebf\u7a0b\u5df2\u7ecf\u88ab\u5524\u9192\uff0c\u5219\u5c1d\u8bd5\u83b7\u53d6\u9501\u3002<\/p>\n<h4>\u975e\u516c\u5e73\u6a21\u5f0f<\/h4>\n<p>\u975e\u516c\u5e73\u6a21\u5f0f\u4e0b\uff0cReentrantLock \u4e0d\u4fdd\u8bc1\u6309\u7167\u8bf7\u6c42\u987a\u5e8f\u83b7\u53d6\u9501\uff0c\u800c\u662f\u76f4\u63a5\u5c1d\u8bd5\u83b7\u53d6\u9501\u3002\u5982\u679c\u5931\u8d25\uff0c\u518d\u8fdb\u5165\u7b49\u5f85\u961f\u5217\u3002<\/p>\n<h4>Semaphore<\/h4>\n<p>Semaphore \u662f\u4e00\u79cd\u57fa\u4e8e AQS \u5b9e\u73b0\u7684\u8ba1\u6570\u4fe1\u53f7\u91cf\uff0c\u7528\u4e8e\u63a7\u5236\u5bf9\u8d44\u6e90\u7684\u8bbf\u95ee\u6570\u91cf\u3002\u5b83\u53ef\u4ee5\u5728\u72ec\u5360\u6a21\u5f0f\u548c\u5171\u4eab\u6a21\u5f0f\u4e0b\u4f7f\u7528\u3002<\/p>\n<p>\u5728\u72ec\u5360\u6a21\u5f0f\u4e0b\uff0cSemaphore \u5141\u8bb8\u4e00\u4e2a\u7ebf\u7a0b\u8bbf\u95ee\u8d44\u6e90\u3002\u5728\u5171\u4eab\u6a21\u5f0f\u4e0b\uff0cSemaphore \u5141\u8bb8\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u8bbf\u95ee\u8d44\u6e90\uff0c\u5176\u6838\u5fc3\u903b\u8f91\u901a\u8fc7 tryAcquireShared \u548c tryReleaseShared \u65b9\u6cd5\u5b9e\u73b0\u3002<\/p>\n<h4>CountDownLatch<\/h4>\n<p>CountDownLatch \u662f\u4e00\u79cd\u57fa\u4e8e AQS \u5b9e\u73b0\u7684\u540c\u6b65\u5de5\u5177\uff0c\u5b83\u5141\u8bb8\u4e00\u4e2a\u6216\u591a\u4e2a\u7ebf\u7a0b\u7b49\u5f85\u4e00\u7ec4\u64cd\u4f5c\u5b8c\u6210\u3002CountDownLatch \u901a\u8fc7\u4e00\u4e2a\u8ba1\u6570\u5668\u6765\u5b9e\u73b0\u8fd9\u4e00\u529f\u80fd\uff0c\u6bcf\u5f53\u4e00\u4e2a\u64cd\u4f5c\u5b8c\u6210\u65f6\uff0c\u8ba1\u6570\u5668\u51cf 1\uff0c\u5f53\u8ba1\u6570\u5668\u51cf\u5230 0 \u65f6\uff0c\u6240\u6709\u7b49\u5f85\u7684\u7ebf\u7a0b\u88ab\u5524\u9192\u3002<\/p>\n<p>CountDownLatch \u4e3b\u8981\u4f7f\u7528\u4e86 AQS \u7684\u5171\u4eab\u6a21\u5f0f\uff0c\u901a\u8fc7 tryAcquireShared \u65b9\u6cd5\u5224\u65ad\u8ba1\u6570\u5668\u662f\u5426\u4e3a 0\uff0c\u5982\u679c\u662f\uff0c\u5219\u83b7\u53d6\u540c\u6b65\u72b6\u6001\uff0c\u5426\u5219\u8fdb\u5165\u7b49\u5f85\u961f\u5217\u3002<\/p>\n<h3 id=\"h3-5\">AQS \u7684\u4f18\u52bf<\/h3>\n<ol>\n<li>\n<p>\u9ad8\u5ea6\u53ef\u6269\u5c55\u6027<br \/>\nAQS \u63d0\u4f9b\u4e86\u4e00\u5957\u901a\u7528\u7684\u540c\u6b65\u72b6\u6001\u7ba1\u7406\u548c\u7ebf\u7a0b\u6392\u961f\u673a\u5236\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u901a\u8fc7\u6269\u5c55 AQS \u5b9e\u73b0\u5404\u79cd\u590d\u6742\u7684\u540c\u6b65\u5668\u3002AQS \u7684\u8bbe\u8ba1\u4f7f\u5f97\u5b83\u5177\u6709\u9ad8\u5ea6\u7684\u53ef\u6269\u5c55\u6027\uff0c\u53ef\u4ee5\u9002\u5e94\u4e0d\u540c\u7684\u5e76\u53d1\u7f16\u7a0b\u9700\u6c42\u3002<\/p>\n<\/li>\n<li>\n<p>\u53ef\u9760\u6027\u548c\u6027\u80fd<br \/>\nAQS \u4f7f\u7528 CAS\uff08Compare-And-Swap\uff09\u64cd\u4f5c\u6765\u7ba1\u7406\u540c\u6b65\u72b6\u6001\uff0c\u4fdd\u8bc1\u4e86\u64cd\u4f5c\u7684\u539f\u5b50\u6027\u548c\u7ebf\u7a0b\u5b89\u5168\u3002\u540c\u65f6\uff0cAQS \u7684\u7b49\u5f85\u961f\u5217\u673a\u5236\u51cf\u5c11\u4e86\u7ebf\u7a0b\u7ade\u4e89\uff0c\u63d0\u9ad8\u4e86\u5e76\u53d1\u6027\u80fd\u3002<\/p>\n<\/li>\n<li>\n<p>\u7b80\u5316\u5f00\u53d1<br \/>\n\u901a\u8fc7 AQS\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4e13\u6ce8\u4e8e\u540c\u6b65\u5668\u7684\u5177\u4f53\u903b\u8f91\u5b9e\u73b0\uff0c\u800c\u65e0\u9700\u5173\u5fc3\u5e95\u5c42\u7684\u7ebf\u7a0b\u6392\u961f\u548c\u72b6\u6001\u7ba1\u7406\u7ec6\u8282\u3002\u8fd9\u5927\u5927\u7b80\u5316\u4e86\u540c\u6b65\u5668\u7684\u5f00\u53d1\u8fc7\u7a0b\uff0c\u63d0\u9ad8\u4e86\u5f00\u53d1\u6548\u7387\u3002<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"h2-6\">AQS\u7684\u7528\u6cd5<\/h2>\n<p>\u7b2c\u4e00\u6b65\uff1a\u5199\u4e00\u4e2a\u7c7b\uff0c\u60f3\u597d\u534f\u4f5c\u7684\u903b\u8f91\uff0c\u5b9e\u73b0\u83b7\u53d6\/\u91ca\u653e\u65b9\u6cd5\u3002<br \/>\n\u7b2c\u4e8c\u6b65\uff1a\u5185\u90e8\u5199\u4e00\u4e2aSync\u7c7b\u7ee7\u627fAbstractQueuedSynchronizer<br \/>\n\u7b2c\u4e09\u6b65\uff1a\u6839\u636e\u662f\u5426\u72ec\u5360\u6765\u91cd\u5199tryAcquire\/tryRelease\u6216tryAcquireShared(int acquires)\u548ctryReleaseShared(intreleases)\u7b49\u65b9\u6cd5\uff0c\u5728\u4e4b\u524d\u5199\u7684\u83b7\u53d6\/\u91ca\u653e\u65b9\u6cd5\u4e2d\u8c03\u7528AQS\u7684acquire\/release\u6216\u8005Shared\u65b9\u6cd5<\/p>\n<h3 id=\"h3-7\">AQS\u5728CountDownLatch\u7684\u5e94\u7528<\/h3>\n<p>\u5185\u90e8\u7c7bSync\u7ee7\u627fAQS<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-161234-VI.png\" alt=\"20260225-161234-VI.png\" \/><br \/>\n\u6784\u9020\u51fd\u6570<br \/>\ngetCount<br \/>\ncountDown<br \/>\nawait<\/p>\n<ol>\n<li>\u8c03\u7528CountDownLatch\u7684await\u65b9\u6cd5\u65f6\uff0c\u4fbf\u4f1a\u5c1d\u8bd5\u83b7\u53d6&quot;\u5171\u4eab<br \/>\n\u9501\u201c\uff0c\u4e0d\u8fc7\u4e00\u5f00\u59cb\u662f\u83b7\u53d6\u4e0d\u5230\u8be5\u9501\u7684\uff0c\u4e8e\u662f\u7ebf\u7a0b\u88ab\u963b\u585e\u3002<\/li>\n<li>\u800c\u201c\u5171\u4eab\u9501\u201d\u53ef\u83b7\u53d6\u5230\u7684\u6761\u4ef6\uff0c\u5c31\u662f\u201d\u9501\u8ba1\u6570\u5668\u201c\u7684\u503c\u4e3a0\u3002<\/li>\n<li>\u800c\u201c\u9501\u8ba1\u6570\u5668\u201d\u7684\u521d\u59cb\u503c\u4e3acount\uff0c\u6bcf\u5f53\u4e00\u4e2a\u7ebf\u7a0b\u8c03\u7528\u8be5CountDownLatch\u5bf9\u8c61\u7684countDown()\u65b9\u6cd5\u65f6\uff0c\u624d\u5c06\u201c\u9501\u8ba1\u6570\u5668\u201d-1<\/li>\n<li>count\u4e2a\u7ebf\u7a0b\u8c03\u7528countDown()\u4e4b\u540e\uff0c&quot;\u9501\u8ba1\u6570\u5668\u201d\u624d\u4e3a0\uff0c<br \/>\n\u800c\u524d\u9762\u63d0\u5230\u7684\u7b49\u5f85\u83b7\u53d6\u5171\u4eab\u9501\u7684\u7ebf\u7a0b\u624d\u80fd\u7ee7\u7eed\u8fd0\u884c\u3002<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-163452-q8.png\" alt=\"20260225-163452-q8.png\" \/><\/li>\n<\/ol>\n<h3 id=\"h3-8\">AQS\u5728Semaphore\u7684\u5e94\u7528<\/h3>\n<ol>\n<li>\u5728Semaphore\u4e2d\uff0cstate\u8868\u793a\u8bb8\u53ef\u8bc1\u7684\u5269\u4f59\u6570\u91cf<\/li>\n<li>\u770btryAcquire\u65b9\u6cd5\uff0c\u5224\u65adnonfairTryAcquireShared\u5927\u4e8e\u7b49\u4e8e<br \/>\n0\u7684\u8bdd\uff0c\u4ee3\u8868\u6210\u529f<\/li>\n<li>\u8fd9\u91cc\u4f1a\u5148\u68c0\u67e5\u5269\u4f59\u8bb8\u53ef\u8bc1\u6570\u91cf\u591f\u4e0d\u591f\u8fd9\u6b21\u9700\u8981\u7684\uff0c\u7528\u51cf\u6cd5\u6765\u8ba1\u7b97\uff0c\u5982\u679c\u76f4\u63a5\u4e0d\u591f\uff0c\u90a3\u5c31\u8fd4\u56de\u8d1f\u6570\uff0c\u8868\u793a\u5931\u8d25\uff0c\u5982\u679c\u591f\u4e86\uff0c\u5c31\u7528\u81ea\u65cb\u52a0compareAndSetState\u6765\u6539\u53d8state\u72b6\u6001\uff0c\u76f4\u5230\u6539\u53d8\u6210\u529f\u5c31\u8fd4\u56de\u6b63\u6570\uff1b\u6216\u8005\u662f\u671f\u95f4\u5982\u679c\u88ab\u5176\u4ed6\u4eba\u4fee\u6539\u4e86\u5bfc\u81f4\u5269\u4f59\u6570\u91cf\u4e0d\u591f\u4e86\uff0c\u90a3\u4e5f\u8fd4\u56de\u8d1f\u6570\u4ee3\u8868\u83b7\u53d6\u5931\u8d25<\/li>\n<\/ol>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-163301-5a.png\" alt=\"20260225-163301-5a.png\" \/><\/p>\n<h3 id=\"h3-9\">AQS\u5728ReentrantLock\u7684\u5e94\u7528<\/h3>\n<p>\u91ca\u653e\u9501\u7684\u65b9\u6cd5tryRelease<br \/>\n\u7531\u4e8e\u662f\u53ef\u91cd\u5165\u7684\uff0c\u6240\u4ee5state\u4ee3\u8868\u91cd\u5165\u7684\u6b21\u6570\uff0c\u6bcf\u6b21\u91ca\u653e\u9501\uff0c\u5148\u5224\u65ad\u662f\u4e0d\u662f\u5f53\u524d\u6301\u6709\u9501\u7684\u7ebf\u7a0b\u91ca\u653e\u7684\uff0c\u5982\u679c\u4e0d\u662f\u5c31\u629b\u5f02\u5e38\uff0c\u5982\u679c\u662f\u7684\u8bdd\uff0c\u91cd\u5165\u6b21\u6570\u5c31\u51cf\u4e00\uff0c\u5982\u679c\u51cf\u5230\u4e860\uff0c\u5c31\u8bf4\u660e\u5b8c\u5168\u91ca\u653e\u4e86\uff0c\u4e8e\u662ffree\u5c31\u662ftrue\uff0c\u5e76\u4e14\u628astate\u8bbe\u7f6e\u4e3a0\u3002<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-165019-sd.png\" alt=\"20260225-165019-sd.png\" \/><\/p>\n<p>\u52a0\u9501\u7684\u65b9\u6cd5tryAcquire<br \/>\n\u5148\u5224\u65adstate\u662f\u5426\u7b49\u4e8e0\uff0c\u5e76\u4e14\u5224\u65ad\u5f53\u524d\u7ebf\u7a0b\u662f\u5426\u662f\u6301\u6709\u9501\u7684\u7ebf\u7a0b\uff0c\u5982\u679c\u90fd\u4e0d\u662f\uff0c\u4ee3\u8868\u76ee\u524d\u62ff\u4e0d\u5230\u8fd9\u628a\u9501\uff0c\u653e\u5728\u7b49\u5f85\u961f\u5217\u7b49\u5f85\uff0c\u5408\u9002\u65f6\u95f4\u8fdb\u884c\u5524\u9192<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-164936-Jm.png\" alt=\"20260225-164936-Jm.png\" \/><\/p>\n<h3 id=\"h3-10\">\u81ea\u5df1\u7528AQS\u5b9e\u73b0\u4e00\u4e2a\u7b80\u5355\u7684\u7ebf\u7a0b\u534f\u4f5c\u5668<\/h3>\n<p>\u5229\u7528AQS\u5b9e\u73b0\u4e00\u4e2a\u7c7b\u4f3c\u4e8eCountDownLatch\u7684\u95e8\u95e9<\/p>\n<pre>package aqs;\n\nimport java.util.concurrent.locks.AbstractQueuedSynchronizer;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u81ea\u5df1\u7528AQS\u5b9e\u73b0\u4e00\u4e2a\u7b80\u5355\u7684\u7ebf\u7a0b\u534f\u4f5c\u5668\n *\/\npublic class OneShotLatch {\n\n    private final Sync sync = new Sync();\n\n    public void signal() {\n        sync.releaseShared(0);\n    }\n    public void await() {\n        sync.acquireShared(0);\n    }\n\n    private class Sync extends AbstractQueuedSynchronizer {\n\n        @Override\n        protected int tryAcquireShared(int arg) {\n            return (getState() == 1) ? 1 : -1;\n        }\n\n        @Override\n        protected boolean tryReleaseShared(int arg) {\n           setState(1);\n\n           return true;\n        }\n    }\n\n    public static void main(String[] args) throws InterruptedException {\n        OneShotLatch oneShotLatch = new OneShotLatch();\n        for (int i = 0; i &lt; 10; i++) {\n            new Thread(new Runnable() {\n                @Override\n                public void run() {\n                    System.out.println(Thread.currentThread().getName()+&quot;\u5c1d\u8bd5\u83b7\u53d6latch\uff0c\u83b7\u53d6\u5931\u8d25\u90a3\u5c31\u7b49\u5f85&quot;);\n                    oneShotLatch.await();\n                    System.out.println(&quot;\u5f00\u95f8\u653e\u884c&quot;+Thread.currentThread().getName()+&quot;\u7ee7\u7eed\u8fd0\u884c&quot;);\n                }\n            }).start();\n        }\n        Thread.sleep(5000);\n        oneShotLatch.signal();\n\n        new Thread(new Runnable() {\n            @Override\n            public void run() {\n                System.out.println(Thread.currentThread().getName()+&quot;\u5c1d\u8bd5\u83b7\u53d6latch\uff0c\u83b7\u53d6\u5931\u8d25\u90a3\u5c31\u7b49\u5f85&quot;);\n                oneShotLatch.await();\n                System.out.println(&quot;\u5f00\u95f8\u653e\u884c&quot;+Thread.currentThread().getName()+&quot;\u7ee7\u7eed\u8fd0\u884c&quot;);\n            }\n        }).start();\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516b)\u2014\u2014AQS(\u5e76\u53d1\u7075\u9b42)-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-172448-8j.png\" alt=\"20260225-172448-8j.png\" \/><\/p>\n<p>\u4f7f\u7528AQS state\u8868\u793a\u95f8\u95e8\u72b6\u6001<br \/>\nawait()\u901a\u8fc7acquireShared\u8fdb\u5165AQS\u961f\u5217\u7b49\u5f85<br \/>\nsignal()\u901a\u8fc7releaseShared\u5524\u9192\u6240\u6709\u7ebf\u7a0b<br \/>\n\u4f7f\u7528\u5171\u4eab\u6a21\u5f0f\u5141\u8bb8\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u901a\u8fc7<br \/>\nstate\u4e00\u65e6\u53d8\u4e3a1\u4e0d\u4f1a\u518d\u53d8\u56de0<br \/>\n\u6240\u4ee5oneShotLatch\u4f5c\u7528\u662f\u4e00\u6b21\u6027\u7684<\/p>\n","excerpt":"<p>AQS\u4ecb\u7ecd \u5728 Java \u5e76\u53d1\u7f16\u7a0b\u4e2d\uff0cAbstractQueuedSynchronizer\uff08AQS\uff09\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u7ec4\u4ef6\u3002AQS \u662f JDK \u63d0\u4f9b\u7684\u4e00\u4e2a\u6846\u67b6\uff0c\u7528\u4e8e\u5b9e\u73b0\u57fa\u4e8e FIFO\uff08First In, First Out\uff09\u7b49\u5f85\u961f\u5217\u7684\u963b\u585e\u9501\u548c\u540c\u6b65\u5668\uff0c\u4f8b\u5982 ReentrantLock\u3001Semaphore\u3001CountDownLatch \u7b49\u3002\u672c\u6587\u5c06\u4ece\u591a &#8230;<\/p>\n","date":"2025-08-06 21:55:30","modified":"2026-03-05 17:06:19","categories":[{"id":80,"slug":"java","title":"java","description":"","parent":63,"post_count":45},{"id":231,"slug":"juc","title":"JUC","description":"","parent":80,"post_count":9},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":82,"slug":"java","title":"java","description":"","post_count":66},{"id":232,"slug":"juc","title":"JUC","description":"","post_count":9}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"views":["278"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2904,"type":"post","slug":"juc%e5%b9%b6%e5%8f%91%e7%bc%96%e7%a8%8b%e4%b8%83-%e6%8e%a7%e5%88%b6%e5%b9%b6%e5%8f%91%e6%b5%81%e7%a8%8b","url":"https:\/\/qkongtao.cn\/?p=2904","status":"publish","title":"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b","title_plain":"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b","content":"<h2 id=\"h2-0\">\u4ec0\u4e48\u662f\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b\uff1f<\/h2>\n<ul>\n<li>\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b\u7684\u5de5\u5177\u7c7b\uff0c\u4f5c\u7528\u5c31\u662f\u5e2e\u52a9\u6211\u4eec\u7a0b\u5e8f\u5458\u66f4\u5bb9\u6613\u5f97\u8ba9\u7ebf\u7a0b\u4e4b\u95f4\u5408\u4f5c<\/li>\n<li>\u8ba9\u7ebf\u7a0b\u4e4b\u95f4\u76f8\u4e92\u914d\u5408\uff0c\u6765\u6ee1\u8db3\u4e1a\u52a1\u903b\u8f91<\/li>\n<li>\u6bd4\u5982\u8ba9\u7ebf\u7a0bA\u7b49\u5f85\u7ebf\u7a0bB\u6267\u884c\u5b8c\u6bd5\u540e\u518d\u6267\u884c\u7b49\u5408\u4f5c\u7b56\u7565<\/li>\n<\/ul>\n<h2 id=\"h2-1\">\u5e38\u89c1\u7684\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b\u7684\u5de5\u5177\u7c7b<\/h2>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260224-232255-41.png\" alt=\"20260224-232255-41.png\" \/><\/p>\n<h3 id=\"h3-2\">CountDownLatch\u7c7b\u7684\u4f5c\u7528<\/h3>\n<h4>\u5012\u6570\u95e8\u95e9<\/h4>\n<p>\u4f8b\u5b50\uff1a\u8d2d\u7269\u62fc\u56e2\uff1b\u5927\u5df4\uff08\u6e38\u4e50\u56ed\u5750\u8fc7\u5c71\u8f66\u6392\u961f\uff09\uff0c\u4eba\u6ee1\u53d1\u8f66\u3002<br \/>\n\u6d41\u7a0b\uff1a\u5012\u6570\u7ed3\u675f\u4e4b\u524d\uff0c\u4e00\u76f4\u5904\u4e8e\u7b49\u5f85\u72b6\u6001\uff0c\u76f4\u5230\u5012\u8ba1\u65f6\u7ed3\u675f\u4e86\uff0c\u6b64\u7ebf\u7a0b\u624d\u7ee7\u7eed\u5de5\u4f5c\u3002<br \/>\n\u5f00\u59cb \u2014\u2014&gt; \u8fdb\u5165\u7b49\u5f85 \u2014\u2014&gt; \u5012\u6570\u7ed3\u675f \u2014\u2014&gt; \u7ee7\u7eed\u5de5\u4f5c<\/p>\n<h4>\u7c7b\u7684\u4e3b\u8981\u65b9\u6cd5\u4ecb\u7ecd<\/h4>\n<ol>\n<li>CountDownLatch(int count)\uff1a\u4ec5\u6709\u4e00\u4e2a\u6784\u9020\u51fd\u6570\uff0c\u53c2\u6570count\u4e3a\u9700\u8981\u5012\u6570\u7684\u6570\u503c\u3002<\/li>\n<li>await()\uff1a\u8c03\u7528await()\u65b9\u6cd5\u7684\u7ebf\u7a0b\u4f1a\u88ab\u6302\u8d77\uff0c\u5b83\u4f1a\u7b49\u5f85\u76f4\u5230count\u503c\u4e3a0\u624d\u7ee7\u7eed\u6267\u884c\u3002<\/li>\n<li>countDown()\uff1a\u5c06count\u503c\u51cf1\uff0c\u76f4\u5230\u4e3a0\u65f6\uff0c\u7b49\u5f85\u7684\u7ebf\u7a0b\u4f1a\u88ab\u5524\u8d77\u3002<\/li>\n<\/ol>\n<h4>\u4e24\u4e2a\u5178\u578b\u7528\u6cd5<\/h4>\n<p>\u7528\u6cd5\u4e00\uff1a\u4e00\u4e2a\u7ebf\u7a0b\u7b49\u5f85\u591a\u4e2a\u7ebf\u7a0b\u90fd\u6267\u884c\u5b8c\u6bd5\uff0c\u518d\u7ee7\u7eed\u81ea\u5df1\u7684\u5de5\u4f5c\u3002<\/p>\n<p>\u793a\u4f8b\u4ee3\u7801\uff1a<\/p>\n<pre>import java.util.concurrent.CountDownLatch;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u5de5\u5382\u4e2d\uff0c\u8d28\u68c0\uff0c5\u4e2a\u5de5\u4eba\u68c0\u67e5\uff0c\u6240\u6709\u4eba\u90fd\u8ba4\u4e3a\u901a\u8fc7\uff0c\u624d\u901a\u8fc7\n *\/\npublic class CountDownLatchDemo1 {\n\n    public static void main(String[] args) throws InterruptedException {\n        CountDownLatch latch = new CountDownLatch(5);\n        ExecutorService service = Executors.newFixedThreadPool(5);\n        for (int i = 0; i &lt; 5; i++) {\n            final int no = i + 1;\n            Runnable runnable = new Runnable() {\n\n                @Override\n                public void run() {\n                    try {\n                        Thread.sleep((long) (Math.random() * 10000));\n                        System.out.println(&quot;No.&quot; + no + &quot;\u5b8c\u6210\u4e86\u68c0\u67e5\u3002&quot;);\n                    } catch (InterruptedException e) {\n                        e.printStackTrace();\n                    } finally {\n                        latch.countDown();\n                    }\n                }\n            };\n            service.submit(runnable);\n        }\n        System.out.println(&quot;\u7b49\u5f855\u4e2a\u4eba\u68c0\u67e5\u5b8c.....&quot;);\n        latch.await();\n        System.out.println(&quot;\u6240\u6709\u4eba\u90fd\u5b8c\u6210\u4e86\u5de5\u4f5c\uff0c\u8fdb\u5165\u4e0b\u4e00\u4e2a\u73af\u8282\u3002&quot;);\n    }\n}<\/pre>\n<p>\u6267\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260224-233733-Dw.png\" alt=\"20260224-233733-Dw.png\" \/><\/p>\n<p>\u4e94\u4e2a\u7ebf\u7a0b\u5e76\u884c\u6267\u884c\u5b8c\u540e\u4e3b\u7ebf\u7a0b\u624d\u7ee7\u7eed\u6267\u884c\u3002<\/p>\n<p>\u7528\u6cd5\u4e8c\uff1a\u591a\u4e2a\u7ebf\u7a0b\u7b49\u5f85\u67d0\u4e00\u4e2a\u7ebf\u7a0b\u7684\u5316\u53f8\u65f6\u5f00\u59cb\u6267\u884c\u3002<br \/>\n\u60c5\u666f\uff1a\u6a21\u62df100\u7c73\u8dd1\u6b65\uff0c5\u540d\u9009\u624b\u90fd\u51c6\u5907\u597d\u4e86\uff0c\u53ea\u7b49\u88c1\u5224\u5458\u4e00\u58f0\u4ee4\u4e0b\uff0c\u6240\u6709\u4eba\u540c\u65f6\u5f00\u59cb\u8dd1\u6b65\u3002\u5f53\u6240\u6709\u4eba\u90fd\u5230\u7ec8\u70b9\u540e\uff0c\u6bd4\u8d5b\u7ed3\u675f\u3002<\/p>\n<p>\u793a\u4f8b\u4ee3\u7801<\/p>\n<pre>import java.util.concurrent.CountDownLatch;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6a21\u62df100\u7c73\u8dd1\u6b65\uff0c5\u540d\u9009\u624b\u90fd\u51c6\u5907\u597d\u4e86\uff0c\u53ea\u7b49\u88c1\u5224\u5458\u4e00\u58f0\u4ee4\u4e0b\uff0c\u6240\u6709\u4eba\u540c\u65f6\u5f00\u59cb\u8dd1\u6b65\u3002\u5f53\u6240\u6709\u4eba\u90fd\u5230\u7ec8\u70b9\u540e\uff0c\u6bd4\u8d5b\u7ed3\u675f\u3002\n *\/\npublic class CountDownLatchDemo1And2 {\n\n    public static void main(String[] args) throws InterruptedException {\n        CountDownLatch begin = new CountDownLatch(1);\n\n        CountDownLatch end = new CountDownLatch(5);\n        ExecutorService service = Executors.newFixedThreadPool(5);\n        for (int i = 0; i &lt; 5; i++) {\n            final int no = i + 1;\n            Runnable runnable = new Runnable() {\n                @Override\n                public void run() {\n                    System.out.println(&quot;No.&quot; + no + &quot;\u51c6\u5907\u5b8c\u6bd5\uff0c\u7b49\u5f85\u53d1\u4ee4\u67aa&quot;);\n                    try {\n                        begin.await();\n                        System.out.println(&quot;No.&quot; + no + &quot;\u5f00\u59cb\u8dd1\u6b65\u4e86&quot;);\n                        Thread.sleep((long) (Math.random() * 10000));\n                        System.out.println(&quot;No.&quot; + no + &quot;\u8dd1\u5230\u7ec8\u70b9\u4e86&quot;);\n                    } catch (InterruptedException e) {\n                        e.printStackTrace();\n                    } finally {\n                        end.countDown();\n                    }\n                }\n            };\n            service.submit(runnable);\n        }\n        \/\/\u88c1\u5224\u5458\u68c0\u67e5\u53d1\u4ee4\u67aa...\n        Thread.sleep(5000);\n        System.out.println(&quot;\u53d1\u4ee4\u67aa\u54cd\uff0c\u6bd4\u8d5b\u5f00\u59cb\uff01&quot;);\n        begin.countDown();\n\n        end.await();\n        System.out.println(&quot;\u6240\u6709\u4eba\u5230\u8fbe\u7ec8\u70b9\uff0c\u6bd4\u8d5b\u7ed3\u675f&quot;);\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260224-235048-Pg.png\" alt=\"20260224-235048-Pg.png\" \/><\/p>\n<p>\u901a\u8fc7\u6a21\u62df100\u7c73\u8dd1\u6b65\u6848\u4f8b\uff0c\u5f88\u597d\u7684\u4f53\u73b0\u51faCountDownLatch\u63a7\u5236\u5e76\u53d1\u7ebf\u7a0b\u6d41\u7a0b\u7684\u80fd\u529b\u3002<\/p>\n<h4>\u6ce8\u610f\u70b9<\/h4>\n<ol>\n<li>\u6269\u5c55\u7528\u6cd5\uff1a\u591a\u4e2a\u7ebf\u7a0b\u7b49\u591a\u4e2a\u7ebf\u7a0b\u5b8c\u6210\u6267\u884c\u540e\uff0c\u518d\u540c\u65f6\u6267\u884c<\/li>\n<li>CountDownLatch\u662f\u4e0d\u80fd\u591f\u91cd\u7528\u7684\uff0c\u5982\u679c\u9700\u8981\u91cd\u65b0\u8ba1\u6570\uff0c\u53ef\u4ee5\u8003\u8651\u4f7f\u7528CyclicBarrier\u6216\u8005\u521b\u5efa\u65b0\u7684CountDownLatch\u5b9e\u4f8b\u3002<\/li>\n<\/ol>\n<h3 id=\"h3-3\">Semaphore\u4fe1\u53f7\u91cf<\/h3>\n<p>Semaphore\u53ef\u4ee5\u7528\u6765\u9650\u5236\u6216\u7ba1\u7406\u6570\u91cf\u6709\u9650\u7684\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\u3002<\/p>\n<h4>\u4fe1\u53f7\u91cf\u4f7f\u7528\u6d41\u7a0b<\/h4>\n<ol>\n<li>\u521d\u59cb\u5316Semaphore\u5e76\u6307\u5b9a\u8bb8\u53ef\u8bc1\u7684\u6570\u91cf<\/li>\n<li>\u5728\u9700\u8981\u88ab\u73b0\u5728\u7684\u4ee3\u7801\u524d\u52a0acquire() \u6216\u8005acquireUninterruptibly()\u65b9\u6cd5<\/li>\n<li>\u5728\u4efb\u52a1\u6267\u884c\u7ed3\u675f\u540e\uff0c\u8c03\u7528release(\u6765\u91ca\u653e\u8bb8\u53ef\u8bc1)<\/li>\n<\/ol>\n<h4>\u4fe1\u53f7\u91cf\u4e3b\u8981\u65b9\u6cd5\u4ecb\u7ecd<\/h4>\n<ol>\n<li>new Semaphore(int permits, boolean fair)\uff1a\u8fd9\u91cc\u53ef\u4ee5\u8bbe\u7f6e\u662f\u5426\u8981\u4f7f\u7528\u516c\u5e73\u7b56\u7565\uff0c\u5982\u679c\u4f20\u5165true\uff0c\u90a3\u4e48Semaphore\u4f1a\u628a \u4e4b\u524d\u7b49\u5f85\u7684\u7ebf\u7a0b\u653e\u5230FIFO\u7684\u961f\u5217\u91cc\uff0c\u4ee5\u4fbf\u4e8e\u5f53\u6709\u4e86\u65b0\u7684\u8bb8\u53ef\u8bc1\uff0c\u53ef\u4ee5\u5206\u53d1\u7ed9\u4e4b\u524d\u7b49\u4e86\u6700\u957f\u65f6\u95f4\u7684\u7ebf\u7a0b\u3002<\/li>\n<li>tryAcquire()\uff1a\u770b\u770b\u73b0\u5728\u6709\u6ca1\u6709\u7a7a\u95f2\u7684\u8bb8\u53ef\u8bc1\uff0c\u5982\u679c\u6709\u7684\u8bdd\u5c31\u83b7\u53d6\uff1b\u5982\u679c\u6ca1\u6709\u7684\u8bdd\u4e5f\u6ca1\u5173\u7cfb\uff0c\u6211\u4e0d\u5fc5\u9677\u5165\u963b\u585e\uff0c\u6211\u53ef\u4ee5\u53bb\u505a\u522b\u7684\u4e8b\uff0c\u8fc7\u4e00\u4f1a\u518d\u6765\u67e5\u770b\u8bb8\u53ef\u8bc1\u7684\u7a7a\u95f2\u60c5\u51b5\u3002<\/li>\n<li>tryAcquire(timeout)\uff1a\u548ctryAcquire()\u4e00\u6837\uff0c\u4f46\u662f\u591a\u4e86\u4e00\u4e2a\u8d85\u65f6\u65f6\u95f4\uff0c\u6bd4\u5982\u201c\u57283\u79d2\u5185\u83b7\u53d6\u4e0d\u5230\u8bb8\u53ef\u8bc1\uff0c\u6211\u5c31\u53bb\u505a\u522b\u7684\u4e8b\u201c\u3002<\/li>\n<\/ol>\n<p>\u4ee3\u7801\u6848\u4f8b<\/p>\n<pre>import java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.Semaphore;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793aSemaphore\u7528\u6cd5\n *\/\npublic class SemaphoreDemo {\n\n    static Semaphore semaphore = new Semaphore(3, true);\n\n    public static void main(String[] args) {\n        ExecutorService service = Executors.newFixedThreadPool(50);\n        for (int i = 0; i &lt; 100; i++) {\n            service.submit(new Task());\n        }\n        service.shutdown();\n    }\n\n    static class Task implements Runnable {\n\n        @Override\n        public void run() {\n            try {\n                semaphore.acquire();\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n            System.out.println(Thread.currentThread().getName() + &quot;\u62ff\u5230\u4e86\u8bb8\u53ef\u8bc1&quot;);\n            try {\n                Thread.sleep(2000);\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n            System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u4e86\u8bb8\u53ef\u8bc1&quot;);\n            semaphore.release();\n        }\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-142535-0D.png\" alt=\"20260225-142535-0D.png\" \/><\/p>\n<h4>\u4fe1\u53f7\u91cf\u7279\u6b8a\u7528\u6cd5<\/h4>\n<p>\u4e00\u6b21\u6027\u83b7\u53d6\u6216\u91ca\u653e\u591a\u4e2a\u8bb8\u53ef\u8bc1\uff1asemaphore.acquire(3)<br \/>\n\u6bd4\u5982TaskA\u4f1a\u8c03\u7528\u5f88\u6d88\u8017\u8d44\u6e90\u7684method1()\uff0c\u800cTaskB\u8c03\u7528\u7684\u662f\u4e0d\u592a\u6d88\u8017\u8d44\u6e90\u7684method2()\uff0c\u5047\u8bbe\u6211\u4eec\u4e00\u5171\u67095\u4e2a\u8bb8\u53ef\u8bc1\u3002\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u8981\u6c42TaskA\u83b7\u53d65\u4e2a\u8bb8\u53ef\u8bc1\u624d\u80fd\u6267\u884c\uff0c\u800cTaskB\u53ea\u9700\u8981\u83b7\u53d6\u5230\u4e00\u4e2a\u8bb8\u53ef\u8bc1\u5c31\u80fd\u6267\u884c\uff0c\u8fd9\u6837\u5c31\u907f\u514d\u4e86A\u548cB\u540c\u65f6\u8fd0\u884c\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u9700\u6c42\u5408\u7406\u5206\u914d\u8d44\u6e90\u3002<\/p>\n<h4>\u6ce8\u610f\u70b9<\/h4>\n<p>1.\u83b7\u53d6\u548c\u91ca\u653e\u7684\u8bb8\u53ef\u8bc1\u6570\u91cf\u5fc5\u987b\u4e00\u81f4\uff0c\u5426\u5219\u6bd4\u5982\u6bcf\u6b21\u90fd\u83b7\u53d62\u4e2a\u4f46\u662f\u53ea\u91ca\u653e1\u4e2a\u751a\u81f3\u4e0d\u91ca\u653e\uff0c\u968f\u7740\u65f6\u95f4\u7684\u63a8\u79fb\uff0c\u5230\u6700\u540e\u8bb8\u53ef\u8bc1\u6570\u91cf\u4e0d\u591f\u7528\uff0c\u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u5361\u6b7b\u3002\uff08\u867d\u7136\u4fe1\u53f7\u91cf\u7c7b\u5e76\u4e0d\u5bf9\u662f\u5426\u548c\u83b7\u53d6\u7684\u6570\u91cf\u505a\u89c4\u5b9a\uff0c\u4f46\u662f\u8fd9\u662f\u6211\u4eec\u7684\u7f16\u7a0b\u89c4\u8303\uff0c\u5426\u5219\u5bb9\u6613\u51fa\u9519\uff09<\/p>\n<p>2.\u6ce8\u610f\u5728\u521d\u59cb\u5316Semaphore\u7684\u65f6\u5019\u8bbe\u7f6e\u516c\u5e73\u6027\uff0c\u4e00\u822c\u8bbe\u7f6e\u4e3atrue\u4f1a\u66f4\u5408\u7406<\/p>\n<p>3.\u5e76\u4e0d\u662f\u5fc5\u987b\u7531\u83b7\u53d6\u8bb8\u53ef\u8bc1\u7684\u7ebf\u7a0b\u91ca\u653e\u90a3\u4e2a\u8bb8\u53ef\u8bc1\uff0c\u4e8b\u5b9e\u4e0a\uff0c\u83b7\u548c\u91ca\u653e\u8bb8\u53ef\u8bc1\u5bf9\u7ebf\u7a0b\u5e76\u65e0\u8981\u6c42\uff0c\u4e5f\u8bb8\u662fA\u83b7\u53d6\u4e86\uff0c\u7136\u540e\u7531B\u91ca\u653e\uff0c\u53ea\u8981\u903b\u8f91\u5408\u7406\u5373\u53ef\u3002<\/p>\n<p>4.\u4fe1\u53f7\u91cf\u7684\u4f5c\u7528\uff0c\u9664\u4e86\u63a7\u5236\u4e34\u754c\u533a\u6700\u591a\u540c\u65f6\u6709N\u4e2a\u7ebf\u7a0b\u8bbf\u95ee\u5916\uff0c\u53e6\u4e00\u4e2a\u4f5c\u7528\u662f\u53ef\u4ee5\u5b9e\u73b0&quot;\u6761\u4ef6\u7b49\u5f85\u301e\uff0c\u4f8b\u5982\u7ebf\u7a0b1\u9700\u8981\u5728\u7ebf\u7a0b2\u5b8c\u6210\u51c6\u5907\u5de5\u4f5c\u540e\u624d\u80fd\u5f00\u59cb\u5de5\u4f5c\uff0c\u90a3\u4e48\u5c31\u7ebf\u7a0blacquire()\uff0c\u800c\u7ebf\u7a0b2\u5b8c\u6210\u4efb\u52a1\u540erelease()\uff0c\u8fd9\u6837\u7684\u8bdd\uff0c\u76f8\u5f53\u4e8e\u662f\u8f7b\u91cf\u7ea7\u7684CountDownLatch\u3002<\/p>\n<h3 id=\"h3-4\">Condition\u63a5\u53e3\uff08\u53c8\u79f0\u6761\u4ef6\u5bf9\u8c61\uff09<\/h3>\n<h4>Condition\u4f5c\u7528<\/h4>\n<ol>\n<li>\u5f53\u7ebf\u7a0b1\u9700\u8981\u7b49\u5f85\u67d0\u4e2a\u6761\u4ef6\u7684\u65f6\u5019\uff0c\u5b83\u5c31\u53bb\u6267\u884ccondition.await()\u65b9\u6cd5\uff0c\u4e00\u65e6\u6267\u884c\u4e86await()\u65b9\u6cd5\uff0c\u7ebf\u7a0b\u5c31\u4f1a\u8fdb\u5165\u963b\u585e\u72b6\u6001<\/li>\n<li>\u7136\u540e\u901a\u5e38\u4f1a\u6709\u53e6\u5916\u4e00\u4e2a\u7ebf\u7a0b\uff0c\u5047\u8bbe\u662f\u7ebf\u7a0b2\uff0c\u53bb\u6267\u884c\u5bf9\u5e94\u7684\u6761\u4ef6\uff0c\u76f4\u5230\u8fd9\u4e2a\u6761\u4ef6\u8fbe\u6210\u7684\u65f6\u5019\uff0c\u7ebf\u7a0b2\u5c31\u4f1a\u53bb\u6267\u884ccondition.signal()\u65b9\u6cd5\uff0c\u8fd9\u65f6JVM\u5c31\u4f1a\u4ece\u88ab\u963b\u585e\u7684\u7ebf\u7a0b\u91cc\u627e\uff0c\u627e\u5230\u90a3\u4e9b\u7b49\u5f85\u8be5condition\u7684\u7ebf\u7a0b\uff0c\u5f53\u7ebf\u7a0b1\u5c31\u4f1a\u6536\u5230\u53ef\u6267\u884c\u4fe1\u53f7\u7684\u65f6\u5019\uff0c\u5b83\u7684\u7ebf\u7a0b\u72b6\u6001\u5c31\u4f1a\u53d8\u6210Runnable\u53ef\u6267\u884c\u72b6\u6001<\/li>\n<\/ol>\n<p><strong>signalAll()\u548csignal()\u533a\u522b<\/strong><br \/>\nsignalAll()\u4f1a\u5524\u8d77\u6240\u6709\u7684\u6b63\u5728\u7b49\u5f85\u7684\u7ebf\u7a0b<br \/>\n\u4f46\u662fsignal()\u662f\u516c\u5e73\u7684\uff0c\u53ea\u4f1a\u5524\u8d77\u90a3\u4e2a\u7b49\u5f85\u65f6\u95f4\u6700\u957f\u7684\u7ebf\u7a0b<\/p>\n<p>Condition\u63a5\u53e3\u662f\u548c\u9501\u7ed1\u5728\u4e00\u8d77\u7684\uff0c\u521b\u5efaCondition\u7684\u65b9\u6cd5\uff1a<br \/>\nprivate ReentrantLock lock = new ReentrantLock();<br \/>\nprivate Condition condition = lock.newCondition();<\/p>\n<h4>\u4ee3\u7801\u6848\u4f8b<\/h4>\n<p>\u4ee3\u7801\u6848\u4f8b\u4e00\uff1a\u6f14\u793aCondition\u7684\u57fa\u672c\u7528\u6cd5<\/p>\n<pre>package flowcontrol.condition;\n\nimport java.util.concurrent.locks.Condition;\nimport java.util.concurrent.locks.ReentrantLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793aCondition\u7684\u57fa\u672c\u7528\u6cd5\n *\/\npublic class ConditionDemo1 {\n    private ReentrantLock lock = new ReentrantLock();\n    private Condition condition = lock.newCondition();\n\n    void method1() throws InterruptedException {\n        lock.lock();\n        try{\n            System.out.println(&quot;\u6761\u4ef6\u4e0d\u6ee1\u8db3\uff0c\u5f00\u59cbawait&quot;);\n            condition.await();\n            System.out.println(&quot;\u6761\u4ef6\u6ee1\u8db3\u4e86\uff0c\u5f00\u59cb\u6267\u884c\u540e\u7eed\u7684\u4efb\u52a1&quot;);\n        }finally {\n            lock.unlock();\n        }\n    }\n\n    void method2() {\n        lock.lock();\n        try{\n            System.out.println(&quot;\u51c6\u5907\u5de5\u4f5c\u5b8c\u6210\uff0c\u5524\u9192\u5176\u4ed6\u7684\u7ebf\u7a0b&quot;);\n            condition.signal();\n        }finally {\n            lock.unlock();\n        }\n    }\n\n    public static void main(String[] args) throws InterruptedException {\n        ConditionDemo1 conditionDemo1 = new ConditionDemo1();\n        new Thread(new Runnable() {\n            @Override\n            public void run() {\n                try {\n                    Thread.sleep(1000);\n                    conditionDemo1.method2();\n                } catch (InterruptedException e) {\n                    e.printStackTrace();\n                }\n            }\n        }).start();\n        conditionDemo1.method1();\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-143940-Fz.png\" alt=\"20260225-143940-Fz.png\" \/><\/p>\n<p>\u4ee3\u7801\u6848\u4f8b\u4e8c\uff1a\u7528Condition\u5b9e\u73b0\u751f\u4ea7\u8005\u6d88\u8d39\u8005\u6a21\u5f0f<\/p>\n<pre>package flowcontrol.condition;\n\nimport java.util.PriorityQueue;\nimport java.util.concurrent.locks.Condition;\nimport java.util.concurrent.locks.Lock;\nimport java.util.concurrent.locks.ReentrantLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u7528Condition\u5b9e\u73b0\u751f\u4ea7\u8005\u6d88\u8d39\u8005\u6a21\u5f0f\n *\/\npublic class ConditionDemo2 {\n\n    private int queueSize = 10;\n    private PriorityQueue&lt;Integer&gt; queue = new PriorityQueue&lt;Integer&gt;(queueSize);\n    private Lock lock = new ReentrantLock();\n    private Condition notFull = lock.newCondition();\n    private Condition notEmpty = lock.newCondition();\n\n    public static void main(String[] args) {\n        ConditionDemo2 conditionDemo2 = new ConditionDemo2();\n        Producer producer = conditionDemo2.new Producer();\n        Consumer consumer = conditionDemo2.new Consumer();\n        producer.start();\n        consumer.start();\n    }\n\n    class Consumer extends Thread {\n\n        @Override\n        public void run() {\n            consume();\n        }\n\n        private void consume() {\n            while (true) {\n                lock.lock();\n                try {\n                    while (queue.size() == 0) {\n                        System.out.println(&quot;\u961f\u5217\u7a7a\uff0c\u7b49\u5f85\u6570\u636e&quot;);\n                        try {\n                            notEmpty.await();\n                        } catch (InterruptedException e) {\n                            e.printStackTrace();\n                        }\n                    }\n                    queue.poll();\n                    notFull.signalAll();\n                    System.out.println(&quot;\u4ece\u961f\u5217\u91cc\u53d6\u8d70\u4e86\u4e00\u4e2a\u6570\u636e\uff0c\u961f\u5217\u5269\u4f59&quot; + queue.size() + &quot;\u4e2a\u5143\u7d20&quot;);\n                } finally {\n                    lock.unlock();\n                }\n            }\n        }\n    }\n\n    class Producer extends Thread {\n\n        @Override\n        public void run() {\n            produce();\n        }\n\n        private void produce() {\n            while (true) {\n                lock.lock();\n                try {\n                    while (queue.size() == queueSize) {\n                        System.out.println(&quot;\u961f\u5217\u6ee1\uff0c\u7b49\u5f85\u6709\u7a7a\u4f59&quot;);\n                        try {\n                            notFull.await();\n                        } catch (InterruptedException e) {\n                            e.printStackTrace();\n                        }\n                    }\n                    queue.offer(1);\n                    notEmpty.signalAll();\n                    System.out.println(&quot;\u5411\u961f\u5217\u63d2\u5165\u4e86\u4e00\u4e2a\u5143\u7d20\uff0c\u961f\u5217\u5269\u4f59\u7a7a\u95f4&quot; + (queueSize - queue.size()));\n                } finally {\n                    lock.unlock();\n                }\n            }\n        }\n    }\n\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-150156-YH.png\" alt=\"20260225-150156-YH.png\" \/><\/p>\n<h4>Condition\u6ce8\u610f\u70b9<\/h4>\n<ol>\n<li>\u5b9e\u9645\u4e0a\uff0c\u5982\u679c\u8bf4Lock\u7528\u6765\u4ee3\u66ffsynchronized\uff0c\u90a3\u4e48Condition\u5c31\u662f\u7528\u6765\u4ee3\u66ff\u76f8\u5bf9\u5e94\u7684Object.wait\/notify\u7684\uff0c\u6240\u4ee5\u5728\u7528\u6cd5\u548c\u6027\u8d28\u4e0a\uff0c\u51e0\u4e4e\u90fd\u4e00\u6837<\/li>\n<li>await\u65b9\u6cd5\u4f1a\u81ea\u52a8\u91ca\u653e\u6301\u6709\u7684Lock\u9501\uff0c\u548cObject.wait\u4e00\u6837\uff0c\u4e0d<br \/>\n\u9700\u8981\u81ea\u5df1\u624b\u52a8\u5148\u91ca\u653e\u9501<\/li>\n<li>\u8c03\u7528await\u7684\u65f6\u5019\uff0c\u5fc5\u987b\u6301\u6709\u9501\uff0c\u5426\u5219\u4f1a\u629b\u51fa\u5f02\u5e38\uff0c\u548cObject.wait\u4e00\u6837\u3002<\/li>\n<\/ol>\n<h4>Condition\u7684await\/notify\u548c\u9501\u7684Object.wait\/notify\u533a\u522b<\/h4>\n<ol>\n<li>\u591a\u6761\u4ef6\u53d8\u91cf\u652f\u6301\uff08\u5173\u952e\u4f18\u52bf\uff09<br \/>\n\u4e00\u4e2a\u9501\u53ef\u4ee5\u521b\u5efa\u591a\u4e2aCondition\uff0c\u4f7f\u63a7\u5236\u9501\u7684\u963b\u585e\u548c\u5524\u9192\u66f4\u7075\u6d3b\uff0cObject.wait\/notify\u53ea\u80fd\u9501\u672c\u8eab\u8fdb\u884c\u963b\u585e\u548c\u5524\u9192\u3002<\/li>\n<\/ol>\n<ul>\n<li>\u4f7f\u7528 Object.wait()\/notify()\uff1a\u6240\u6709\u7ebf\u7a0b\uff08\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\uff09\u90fd\u5728\u540c\u4e00\u4e2a\u5bf9\u8c61\u7684\u7b49\u5f85\u961f\u5217\u4e2d\u3002\u5f53\u7f13\u51b2\u533a\u6709\u7a7a\u4f4d\u65f6\uff0cnotify() \u53ef\u80fd\u5524\u9192\u4e00\u4e2a\u6d88\u8d39\u8005\u7ebf\u7a0b\uff0c\u800c\u8be5\u7ebf\u7a0b\u53d1\u73b0\u7f13\u51b2\u533a\u4ecd\u7a7a\uff0c\u4f1a\u518d\u6b21\u7b49\u5f85\uff0c\u9020\u6210\u6548\u7387\u4f4e\u4e0b\u3002notifyAll() \u4f1a\u5524\u9192\u6240\u6709\u7ebf\u7a0b\uff0c\u5f15\u53d1\u201c\u60ca\u7fa4\u6548\u5e94\u201d\u3002<\/li>\n<li>\u4f7f\u7528 Condition.await()\/signal()\uff1a\u53ef\u4ee5\u521b\u5efa\u4e24\u4e2a Condition \u5bf9\u8c61\uff0c\u4f8b\u5982 notFull\uff08\u7f13\u51b2\u533a\u672a\u6ee1\u65f6\u751f\u4ea7\u8005\u7b49\u5f85\uff09\u548c notEmpty\uff08\u7f13\u51b2\u533a\u975e\u7a7a\u65f6\u6d88\u8d39\u8005\u7b49\u5f85\uff09\u3002\u751f\u4ea7\u8005\u5728 notFull.await() \u4e2d\u7b49\u5f85\uff0c\u6d88\u8d39\u8005\u5728 notEmpty.await() \u4e2d\u7b49\u5f85\u3002\u5f53\u751f\u4ea7\u8005\u653e\u5165\u4e00\u4e2a\u5143\u7d20\u540e\uff0c\u53ea\u9700\u8c03\u7528 notEmpty.signal()\uff0c\u5c31\u80fd\u200c\u7cbe\u51c6\u5730\u200c\u5524\u9192\u4e00\u4e2a\u7b49\u5f85\u7684\u6d88\u8d39\u8005\uff0c\u800c\u4e0d\u4f1a\u5e72\u6270\u751f\u4ea7\u8005\u7ebf\u7a0b\u3002<\/li>\n<\/ul>\n<ol start=\"2\">\n<li>\u529f\u80fd\u4e30\u5bcc\u6027<br \/>\nCondition \u63d0\u4f9b\u4e86\u66f4\u4e30\u5bcc\u7684\u7b49\u5f85\u65b9\u6cd5\uff1a<\/li>\n<\/ol>\n<pre>awaitNanos(long nanosTimeout)\uff1a\u7b49\u5f85\u6307\u5b9a\u7684\u7eb3\u79d2\u6570\u3002\nawait(long time, TimeUnit unit)\uff1a\u7b49\u5f85\u6307\u5b9a\u7684\u65f6\u95f4\u6bb5\u3002\nawaitUntil(Date deadline)\uff1a\u7b49\u5f85\u5230\u6307\u5b9a\u7684\u622a\u6b62\u65e5\u671f\u3002\nawaitUninterruptibly()\uff1a\u7b49\u5f85\u65f6\u4e0d\u54cd\u5e94\u4e2d\u65ad\u3002<\/pre>\n<p>\u8fd9\u4e9b\u65b9\u6cd5\u5728 Object.wait() \u4e2d\u5747\u4e0d\u652f\u6301\u3002<\/p>\n<ol start=\"3\">\n<li>\u5f02\u5e38\u5904\u7406\u4e0e\u5b89\u5168\u6027<\/li>\n<\/ol>\n<ul>\n<li>\u4e24\u8005\u5728\u7b49\u5f85\u65f6\u88ab\u4e2d\u65ad\u90fd\u4f1a\u629b\u51fa InterruptedException\u3002<\/li>\n<li>Condition \u7684\u4f18\u52bf\u5728\u4e8e\u5176\u200c\u663e\u5f0f\u9501\u200c\u673a\u5236\u3002\u867d\u7136\u9700\u8981\u624b\u52a8 unlock()\uff0c\u4f46\u8fd9\u4f7f\u5f97\u9501\u7684\u7ba1\u7406\u66f4\u7075\u6d3b\uff0c\u4f8b\u5982\u53ef\u4ee5\u5b9e\u73b0\u516c\u5e73\u9501\u3002\u800c synchronized \u9501\u7684\u83b7\u53d6\u548c\u91ca\u653e\u662f\u81ea\u52a8\u7684\uff0c\u4f46\u65e0\u6cd5\u4e2d\u65ad\u6216\u8bbe\u7f6e\u8d85\u65f6\u3002<\/li>\n<\/ul>\n<h3 id=\"h3-5\">CyclicBarrier\u5faa\u73af\u6805\u680f<\/h3>\n<ol>\n<li>CyclicBarrier\u5faa\u73af\u6805\u680f\u548cCountDownLatch\u5f88\u7c7b\u4f3c\uff0c\u90fd\u80fd\u963b\u585e\u4e00\u7ec4\u7ebf\u7a0b<\/li>\n<li>\u5f53\u6709\u5927\u91cf\u7ebf\u7a0b\u76f8\u4e92\u914d\u5408\uff0c\u5206\u522b\u8ba1\u7b97\u4e0d\u540c\u4efb\u52a1\uff0c\u5e76\u4e14\u9700\u8981\u6700\u540e\u7edf\u4e00\u6c47\u603b\u7684\u65f6\u5019\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528Cyclic Barrier\u3002CyclicBarrier\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u96c6\u7ed3\u70b9\uff0c\u5f53\u67d0\u4e00\u4e2a\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5\uff0c\u5b83\u5c31\u4f1a\u5230\u96c6\u7ed3\u70b9\u7b49\u5f85\uff0c\u76f4\u5230\u6240\u6709\u7ebf\u7a0b\u90fd\u5230\u4e86\u96c6\u7ed3\u70b9\uff0c\u90a3\u4e48\u8be5\u6805\u680f\u5c31\u88ab\u64a4\u9500\uff0c\u6240\u6709\u7ebf\u7a0b\u518d\u7edf\u4e00\u51fa\u53d1\uff0c\u7ee7\u7eed\u6267\u884c\u5269\u4e0b\u7684\u4efb\u52a1\u3002<\/li>\n<\/ol>\n<p>\u751f\u6d3b\u4e2d\u7684\u4f8b\u5b50\uff1a\u201d\u54b1\u4eec3\u4e2a\u4eba\u660e\u5929\u4e2d\u5348\u5728\u5b66\u6821\u78b0\u9762\uff0c\u90fd\u5230\u9f50\u540e\uff0c\u4e00\u8d77\u8ba8\u8bba\u4e0b\u5b66\u671f\u7684\u8ba1\u5212\u3002<\/p>\n<p>\u4ee3\u7801\u5b9e\u73b0\uff1a<\/p>\n<pre>package flowcontrol.cyclicbarrier;\n\nimport java.util.concurrent.BrokenBarrierException;\nimport java.util.concurrent.CyclicBarrier;\n\n\/**\n * \u63cf\u8ff0\uff1a    \u6f14\u793aCyclicBarrier\n *\/\npublic class CyclicBarrierDemo {\n    public static void main(String[] args) {\n        CyclicBarrier cyclicBarrier = new CyclicBarrier(5, new Runnable() {\n            @Override\n            public void run() {\n                System.out.println(&quot;\u6240\u6709\u4eba\u90fd\u5230\u573a\u4e86\uff0c \u5927\u5bb6\u7edf\u4e00\u51fa\u53d1\uff01&quot;);\n            }\n        });\n        for (int i = 0; i &lt; 10; i++) {\n            new Thread(new Task(i, cyclicBarrier)).start();\n        }\n    }\n\n    static class Task implements Runnable{\n        private int id;\n        private CyclicBarrier cyclicBarrier;\n\n        public Task(int id, CyclicBarrier cyclicBarrier) {\n            this.id = id;\n            this.cyclicBarrier = cyclicBarrier;\n        }\n\n        @Override\n        public void run() {\n            System.out.println(&quot;\u7ebf\u7a0b&quot; + id + &quot;\u73b0\u5728\u524d\u5f80\u96c6\u5408\u5730\u70b9&quot;);\n            try {\n                Thread.sleep((long) (Math.random()*10000));\n                System.out.println(&quot;\u7ebf\u7a0b&quot;+id+&quot;\u5230\u4e86\u96c6\u5408\u5730\u70b9\uff0c\u5f00\u59cb\u7b49\u5f85\u5176\u4ed6\u4eba\u5230\u8fbe&quot;);\n                cyclicBarrier.await();\n                System.out.println(&quot;\u7ebf\u7a0b&quot;+id+&quot;\u51fa\u53d1\u4e86&quot;);\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            } catch (BrokenBarrierException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e03)\u2014\u2014\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260225-151559-O5.png\" alt=\"20260225-151559-O5.png\" \/><\/p>\n<h4>CyclicBarrier\u548cCountDownLatch\u7684\u533a\u522b<\/h4>\n<ol>\n<li>\u4f5c\u7528\u4e0d\u540c\uff1aCyclicBarrier\u8981\u7b49\u56fa\u5b9a\u6570\u91cf\u7684\u7ebf\u7a0b\u90fd\u5230\u8fbe\u4e86\u6805\u680f\u4f4d\u7f6e\u624d\u80fd\u7ee7\u7eed\u6267\u884c\uff0c\u800cCountDownLatch\u53ea\u9700\u7b49\u5f85\u6570\u5b57\u52300\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0cCountDownLatch\u7528\u4e8e\u4e8b\u4ef6\uff0c\u4f46\u662fCyclicBarrier\u662f\u7528\u4e8e\u7ebf\u7a0b\u7684\u3002<\/li>\n<li>\u53ef\u91cd\u7528\u6027\u4e0d\u540c\uff1aCountDownLatch\u5728\u5012\u6570\u52300\u5e76\u89e6\u53d1\u540e\uff0c\u5c31\u4e0d\u80fd\u518d\u6b21\u4f7f\u7528\u4e86\uff0c\u9664\u975e\u65b0\u5efa\u65b0\u7684\u5b9e\u4f8b\uff1b\u800cCyclicBarrier\u53ef\u4ee5\u91cd\u590d\u4f7f\u7528\u3002<\/li>\n<\/ol>\n","excerpt":"<p>\u4ec0\u4e48\u662f\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b\uff1f \u63a7\u5236\u5e76\u53d1\u6d41\u7a0b\u7684\u5de5\u5177\u7c7b\uff0c\u4f5c\u7528\u5c31\u662f\u5e2e\u52a9\u6211\u4eec\u7a0b\u5e8f\u5458\u66f4\u5bb9\u6613\u5f97\u8ba9\u7ebf\u7a0b\u4e4b\u95f4\u5408\u4f5c \u8ba9\u7ebf\u7a0b\u4e4b\u95f4\u76f8\u4e92\u914d\u5408\uff0c\u6765\u6ee1\u8db3\u4e1a\u52a1\u903b\u8f91 \u6bd4\u5982\u8ba9\u7ebf\u7a0bA\u7b49\u5f85\u7ebf\u7a0bB\u6267\u884c\u5b8c\u6bd5\u540e\u518d\u6267\u884c\u7b49\u5408\u4f5c\u7b56\u7565 \u5e38\u89c1\u7684\u63a7\u5236\u5e76\u53d1\u6d41\u7a0b\u7684\u5de5\u5177\u7c7b CountDownLatch\u7c7b\u7684\u4f5c\u7528 \u5012\u6570\u95e8\u95e9 \u4f8b\u5b50 &#8230;<\/p>\n","date":"2025-07-27 01:45:49","modified":"2026-03-05 17:06:01","categories":[{"id":80,"slug":"java","title":"java","description":"","parent":63,"post_count":45},{"id":231,"slug":"juc","title":"JUC","description":"","parent":80,"post_count":9},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":82,"slug":"java","title":"java","description":"","post_count":66},{"id":232,"slug":"juc","title":"JUC","description":"","post_count":9}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"views":["200"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2901,"type":"post","slug":"juc%e5%b9%b6%e5%8f%91%e7%bc%96%e7%a8%8b%e5%85%ad-%e5%b9%b6%e5%8f%91%e5%ae%b9%e5%99%a8","url":"https:\/\/qkongtao.cn\/?p=2901","status":"publish","title":"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668","title_plain":"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668","content":"<h2 id=\"h2-0\">\u5e76\u53d1\u5bb9\u5668\u6982\u89c8<\/h2>\n<ul>\n<li>ConcurrentHashMap\uff1a\u7ebf\u7a0b\u5b89\u5168\u7684HashMap<\/li>\n<li>CopyOnWriteArrayList\uff1a\u7ebf\u7a0b\u5b89\u5168\u7684List<\/li>\n<li>BlockingQueue\uff1a\u8fd9\u662f\u4e00\u4e2a\u63a5\u53e3\uff0c\u8868\u793a\u963b\u585e\u961f\u5217\uff0c\u975e\u5e38\u9002\u5408\u7528\u4e8e\u4f5c\u4e3a\u6570\u636e\u5171\u4eab\u7684\u901a\u9053<\/li>\n<li>ConcurrentLinkedQueue: \u9ad8\u6548\u7684\u975e\u963b\u585e\u5e76\u53d1\u961f\u5217\uff0c\u4f7f\u7528<br \/>\n\u94fe\u8868\u5b9e\u73b0\u3002\u53ef\u4ee5\u770b\u505a\u4e00\u4e2a\u7ebf\u7a0b\u5b89\u5168\u7684LinkedList<\/li>\n<li>ConcurrentSkipListMap:\u662f\u4e00\u4e2aMap\uff0c\u4f7f\u7528\u8df3\u8868\u7684\u6570\u636e\u7ed3<br \/>\n\u6784\u8fdb\u884c\u5feb\u901f\u67e5\u627e<\/li>\n<\/ul>\n<h2 id=\"h2-1\">\u96c6\u5408\u7c7b\u7684\u5386\u53f2<\/h2>\n<ol>\n<li>Vector\u548cHashtable<br \/>\n<strong>\u7ebf\u7a0b\u5b89\u5168\u7684<\/strong><\/li>\n<\/ol>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260115-173110-Wb.png\" alt=\"20260115-173110-Wb.png\" \/><\/p>\n<p>\u5927\u90e8\u5206\u65b9\u6cd5\u90fd\u662f\u4f7f\u7528synchronized\u4fee\u9970\uff0c\u6027\u80fd\u8f83\u5dee\u3002<\/p>\n<ol start=\"2\">\n<li>ArrayList\u548cHashMap<br \/>\n<strong>\u975e\u7ebf\u7a0b\u5b89\u5168\u7684<\/strong><\/li>\n<\/ol>\n<p>ArrayList\u7ebf\u7a0b\u5b89\u5168\u89e3\u51b3\u65b9\u6848\uff1a<\/p>\n<ul>\n<li>\u624b\u52a8\u52a0\u9501\uff08\u6027\u80fd\u5f00\u9500\u5927\uff09<\/li>\n<li>\u4f7f\u7528Collections.synchronizedList(new ArrayList&lt;&gt;)\uff08\u6027\u80fd\u5f00\u9500\u8f83\u5927\uff09<\/li>\n<li>\u4f7f\u7528CopyOnWriteArrayList\uff08\u5199\u65f6\u62f7\u8d1d\uff0c\u9002\u7528\u4e8e\u8bfb\u591a\u5199\u5c11\u573a\u666f\uff09<\/li>\n<\/ul>\n<p>HashMap\u7ebf\u7a0b\u5b89\u5168\u89e3\u51b3\u65b9\u6848\uff1a<\/p>\n<ul>\n<li>\u4f7f\u7528Hashtable\uff08\u6027\u80fd\u8f83\u5dee\uff0c\u4e0d\u63a8\u8350\uff09<\/li>\n<li>\u4f7f\u7528ConcurrentHashMap\uff08\u8bfb\u65e0\u9501\u3001\u5199\u5206\u6bb5\u9501\uff0c\u63a8\u8350\uff09<\/li>\n<\/ul>\n<ol start=\"3\">\n<li>ConcurrentHashMap\u548cCopyOnWriteArrayList<br \/>\n\u53d6\u4ee3\u540c\u6b65\u7684HashMap\u548c\u540c\u6b65\u7684ArrayList\uff0c\u7edd\u5927\u591a\u6570\u5e76\u53d1\u60c5\u51b5\u4e0b\uff0cConcurrentHashMap\u548c<br \/>\nCopyOnWriteArrayList\u7684\u6027\u80fd\u90fd\u66f4\u597d<\/li>\n<\/ol>\n<p>\u4e3a\u4ec0\u4e48HashMap\u662f\u7ebf\u7a0b\u4e0d\u5b89\u5168\u7684\uff1f<br \/>\n\u540c\u65f6put\u78b0\u649e\u5bfc\u81f4\u6570\u636e\u4e22\u5931<br \/>\n\u540c\u65f6put\u6269\u5bb9\u5bfc\u81f4\u6570\u636e\u4e22\u5931<br \/>\n\u5728\u6269\u5bb9\u7684\u65f6\u5019\u4f1a\u9020\u6210\u94fe\u8868\u7684\u6b7b\u5faa\u73af\uff0cCPU100%<\/p>\n<p>\u53c2\u8003\u535a\u5ba2\uff1a<a href=\"https:\/\/coolshell.cn\/articles\/9606.html\" rel=\"nofollow noopener\" >Java HashMap\u7684\u6b7b\u5faa\u73af<\/a><\/p>\n<h3 id=\"h3-2\">HashMap\u6570\u636e\u7ed3\u6784<\/h3>\n<p>JDK1.8\u540eHashMap\u91c7\u7528\u201c\u6570\u7ec4 + \u94fe\u8868 + \u7ea2\u9ed1\u6811\u201d\u590d\u5408\u7ed3\u6784\uff0c\u901a\u8fc7\u54c8\u5e0c\u8868\u5b9e\u73b0\u9ad8\u6548\u5b58\u50a8\u4e0e\u68c0\u7d22\u6570\u636e\u7ed3\u6784\uff0c\u521d\u59cb\u5bb9\u91cf16\u3001\u8d1f\u8f7d\u56e0\u5b500.75\u5e73\u8861\u5185\u5b58\u4e0e\u6027\u80fd\u3002<\/p>\n<p>\u6570\u7ec4\uff08\u6876\u6570\u7ec4\uff09\uff1a<\/p>\n<ul>\n<li>\u4f5c\u4e3a\u5e95\u5c42\u5b58\u50a8\u7ed3\u6784\uff0c\u6bcf\u4e2a\u5143\u7d20\u79f0\u4e3a\u201c\u6876\u201d\uff08Bucket\uff09\u3002<\/li>\n<li>\u6bcf\u4e2a\u6876\u5b58\u50a8\u4e00\u4e2a\u94fe\u8868\u5934\u8282\u70b9\u6216\u7ea2\u9ed1\u6811\u6839\u8282\u70b9\u3002<\/li>\n<li>\u6570\u7ec4\u957f\u5ea6\u4e3a2\u7684\u5e42\u6b21\u65b9\uff08\u598216\u300132\uff09\uff0c\u901a\u8fc7\u4f4d\u8fd0\u7b97\u4f18\u5316\u54c8\u5e0c\u7d22\u5f15\u3002<\/li>\n<\/ul>\n<p>\u94fe\u8868\uff1a<\/p>\n<ul>\n<li>\u89e3\u51b3\u54c8\u5e0c\u51b2\u7a81\uff08\u4e0d\u540c\u952e\u503c\u5bf9\u6620\u5c04\u5230\u540c\u4e00\u6876\uff09\uff0c\u5f62\u6210\u94fe\u8868\u3002<\/li>\n<li>\u6bcf\u4e2a\u8282\u70b9\uff08Node\uff09\u5305\u542b\u952e\u503c\u5bf9\u548c\u6307\u5411\u4e0b\u4e00\u4e2a\u8282\u70b9\u7684\u5f15\u7528\u3002<\/li>\n<\/ul>\n<p>\u7ea2\u9ed1\u6811\uff08JDK 8+\uff09\uff1a<\/p>\n<ul>\n<li>\u5f53\u94fe\u8868\u957f\u5ea6\u8d85\u8fc7\u9608\u503c\uff08\u9ed8\u8ba48\uff09\u4e14\u6570\u7ec4\u957f\u5ea6\u226564\u65f6\uff0c\u94fe\u8868\u8f6c\u7ea2\u9ed1\u6811\u3002<\/li>\n<li>\u63d0\u9ad8\u67e5\u627e\u6548\u7387\uff0c\u907f\u514d\u6781\u7aef\u60c5\u51b5\u4e0b\u7684\u6027\u80fd\u9000\u5316\uff08\u5982\u54c8\u5e0c\u51b2\u7a81\u5bfc\u81f4\u94fe\u8868\u8fc7\u957f\uff09\u3002<\/li>\n<\/ul>\n<p>\u7ea2\u9ed1\u6811\u7b80\u4ecb\uff1a<br \/>\n\u5bf9\u4e8c\u53c9\u67e5\u627e\u6811BST\u7684\u4e00\u79cd\u5e73\u8861\u7b56\u7565\uff0c \u7ea2\u9ed1\u6811\u67e5\u627e\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(log n)\uff0c\u94fe\u8868\u4e3a O(n)\u3002<br \/>\n\u4f1a\u81ea\u52a8\u5e73\u8861\uff0c\u9632\u6b62\u6781\u7aef\u4e0d\u5e73\u8861\u4ece\u800c\u5f71\u54cd\u67e5\u627e\u6548\u7387\u7684\u60c5\u51b5\u53d1\u751f<\/p>\n<h2 id=\"h2-3\">ConcurrentHashMap<\/h2>\n<h3 id=\"h3-4\">ConcurrentHashMap\u5b9e\u73b0\u548c\u5206\u6790<\/h3>\n<p>JDK1.7\u7684ConcurrentHashMap\u5b9e\u73b0\u548c\u5206\u6790<\/p>\n<ul>\n<li>Java 7\u4e2d\u7684ConcurrentHashMap\u6700\u5916\u5c42\u662f\u591a\u4e2asegment\uff0c\u6bcf\u4e2asegment\u7684\u5e95\u5c42\u6570\u636e\u7ed3\u6784\u4e0eHashMap\u7c7b\u4f3c\uff0c\u4ecd\u7136\u662f\u6570\u7ec4\u548c\u94fe\u8868\u7ec4\u6210\u7684\u62c9\u94fe\u6cd5<\/li>\n<li>\u6bcf\u4e2asegment\u72ec\u7acb\u4e0aReentrantLock\u9501\uff0c\u6bcf\u4e2asegment\u4e4b\u95f4\u4e92\u4e0d\u5f71\u54cd\uff0c\u63d0\u9ad8\u4e86\u5e76\u53d1\u6548\u7387<\/li>\n<li>ConcurrentHashMap \u9ed8\u8ba4\u670916\u4e2a Segments\uff0c\u6240\u4ee5\u6700\u591a\u53ef\u4ee5\u540c\u65f6\u652f\u630116 \u4e2a\u7ebf\u7a0b\u5e76\u53d1\u5199\uff08\u64cd\u4f5c\u5206\u522b\u5206\u5e03\u5728\u4e0d\u540c\u7684<br \/>\nSegment \u4e0a\uff09\u3002\u8fd9\u4e2a\u9ed8\u8ba4\u503c\u53ef\u4ee5\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\u8bbe\u7f6e\u4e3a\u5176\u4ed6\u503c\uff0c\u4f46\u662f\u4e00\u65e6\u521d\u59cb\u5316\u4ee5\u540e\uff0c\u662f\u4e0d\u53ef\u4ee5\u6269\u5bb9\u7684<\/li>\n<\/ul>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260115-184106-j1.png\" alt=\"20260115-184106-j1.png\" \/><\/p>\n<p>JDK1.8\u7684ConcurrentHashMap\u5b9e\u73b0\u548c\u5206\u6790<\/p>\n<ul>\n<li>Java 8\u4e2d\u7684ConcurrentHashMap\u6700\u5916\u5c42\u662f\u591a\u4e2aNode\uff0c\u94fe\u8868\u957f\u5ea6\u22658\u4e14\u6570\u7ec4\u957f\u5ea6\u226564\u65f6\u81ea\u52a8\u8f6c\u7ea2\u9ed1\u6811<\/li>\n<li>\u5934\u8282\u70b9synchronized\u9501\uff08\u7ec6\u7c92\u5ea6\u9501\uff09\uff0c\u901a\u8fc7CAS\u548cvolatile\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5355\u4e2a\u6570\u7ec4\u652f\u6301\u66f4\u9ad8\u5e76\u53d1<\/li>\n<li>1.8\u91c7\u7528\u7ec6\u7c92\u5ea6\u9501\uff08\u5934\u8282\u70b9synchronized\uff09\uff0c\u53ef\u6269\u5bb9\uff0c\u663e\u8457\u63d0\u5347\u9ad8\u5e76\u53d1\u573a\u666f\u4e0b\u7684\u541e\u5410\u91cf<\/li>\n<\/ul>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260115-191603-SA.png\" alt=\"20260115-191603-SA.png\" \/><\/p>\n<p>putVal\u6d41\u7a0b<\/p>\n<ol>\n<li>\u5224\u65adkey value \u4e0d\u4e3a\u7a7a<\/li>\n<li>\u8ba1\u7b97hash\u503c<\/li>\n<li>\u6839\u636e\u5bf9\u5e94\u4f4d\u7f6e\u8282\u70b9\u7684\u7c7b\u578b\uff0c\u6765\u8d4b\u503c\uff0c\u6216\u8005 helpTransfer\uff0c\u6216\u8005\u589e\u957f\u94fe\u8868\uff0c\u6216\u8005\u7ed9\u7ea2\u9ed1\u6811\u589e\u52a0\u8282\u70b9<\/li>\n<li>\u68c0\u67e5\u6ee1\u8db3\u9608\u503c\u5c31\u201c\u7ea2\u9ed1\u6811\u5316\u201d<\/li>\n<li>\u8fd4\u56deoldVal<\/li>\n<\/ol>\n<p>\u6ce8\u610f\uff1a\u94fe\u8868\u8f6c\u7ea2\u9ed1\u6811\u9608\u503c\uff1a8<\/p>\n<p>\u539f\u56e0\uff1a\u57fa\u4e8e\u6cca\u677e\u5206\u5e03\u8ba1\u7b97\uff0c\u5f53\u8d1f\u8f7d\u56e0\u5b50\u4e3a0.75\u65f6\uff0c\u94fe\u8868\u957f\u5ea6\u8fbe\u52308\u7684\u6982\u7387\u6781\u4f4e\uff08\u7ea60.00000006\uff09\uff0c\u5c5e\u4e8e\u5c0f\u6982\u7387\u4e8b\u4ef6\u3002<br \/>\n\u8bbe\u8ba1\u76ee\u7684\uff1a\u5728\u6b63\u5e38\u54c8\u5e0c\u5206\u5e03\u4e0b\u4f18\u5148\u4f7f\u7528\u9ad8\u6548\u94fe\u8868\u7ed3\u6784\uff0c\u4ec5\u5728\u6781\u7aef\u51b2\u7a81\u65f6\u89e6\u53d1\u7ea2\u9ed1\u6811\u4f18\u5316\u3002<\/p>\n<p>get\u6d41\u7a0b<\/p>\n<ol>\n<li>\u8ba1\u7b97hash\u503c<\/li>\n<li>\u627e\u5230\u5bf9\u5e94\u7684\u4f4d\u7f6e\uff0c\u6839\u636e\u60c5\u51b5\u8fdb\u884c\uff1a<\/li>\n<li>\u76f4\u63a5\u53d6\u503c<\/li>\n<li>\u7ea2\u9ed1\u6811\u91cc\u627e\u503c<\/li>\n<li>\u904d\u5386\u94fe\u8868\u53d6\u503c<\/li>\n<li>\u8fd4\u56de\u627e\u5230\u7684\u7ed3\u679c<\/li>\n<\/ol>\n<p>\u4e3a\u4ec0\u4e48\u8981\u628a1.7\u7684\u7ed3\u6784\u6539\u62101.8\u7684\u7ed3\u6784\uff1f<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260115-192114-8H.png\" alt=\"20260115-192114-8H.png\" \/><\/p>\n<h3 id=\"h3-5\">ConcurrentHashMap\u7ebf\u7a0b\u5b89\u5168\u6ce8\u610f\u70b9<\/h3>\n<p><strong>\u7ec4\u5408\u64cd\u4f5c\u5e76\u4e0d\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168<\/strong><\/p>\n<p>\u6848\u4f8b\u4ee3\u7801\uff1a<\/p>\n<pre>package collections.concurrenthashmap;\n\nimport java.util.concurrent.ConcurrentHashMap;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u7ec4\u5408\u64cd\u4f5c\u5e76\u4e0d\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\n *\/\npublic class OptionsNotSafe implements Runnable {\n\n    private static ConcurrentHashMap&lt;String, Integer&gt; scores = new ConcurrentHashMap&lt;String, Integer&gt;();\n\n    public static void main(String[] args) throws InterruptedException {\n        scores.put(&quot;\u5c0f\u660e&quot;, 0);\n        Thread t1 = new Thread(new OptionsNotSafe());\n        Thread t2 = new Thread(new OptionsNotSafe());\n        t1.start();\n        t2.start();\n        t1.join();\n        t2.join();\n        System.out.println(scores);\n    }\n\n    @Override\n    public void run() {\n        for (int i = 0; i &lt; 1000; i++) {\n            Integer score = scores.get(&quot;\u5c0f\u660e&quot;);\n            Integer newScore = score + 1;\n            scores.put(&quot;\u5c0f\u660e&quot;,newScore);\n        }\n\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260115-193540-NM.png\" alt=\"20260115-193540-NM.png\" \/><br \/>\n\u53d1\u73b0\u7ec4\u5408\u64cd\u4f5c\u5e76\u975e\u7ebf\u7a0b\u5b89\u5168\uff0cconcurrenthashmap\u53ea\u80fd\u4fdd\u8bc1get\u6216\u8005put\u7b49\u64cd\u4f5c\u7684\u7ebf\u7a0b\u5b89\u5168\u3002<\/p>\n<p>\u4ee3\u7801\u4f18\u5316\uff1a<\/p>\n<pre>package collections.concurrenthashmap;\n\nimport java.util.concurrent.ConcurrentHashMap;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u7ec4\u5408\u64cd\u4f5c\u5e76\u4e0d\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\n *\/\npublic class OptionsNotSafe implements Runnable {\n\n    private static ConcurrentHashMap&lt;String, Integer&gt; scores = new ConcurrentHashMap&lt;String, Integer&gt;();\n\n    public static void main(String[] args) throws InterruptedException {\n        scores.put(&quot;\u5c0f\u660e&quot;, 0);\n        Thread t1 = new Thread(new OptionsNotSafe());\n        Thread t2 = new Thread(new OptionsNotSafe());\n        t1.start();\n        t2.start();\n        t1.join();\n        t2.join();\n        System.out.println(scores);\n    }\n\n    @Override\n    public void run() {\n        for (int i = 0; i &lt; 1000; i++) {\n            while (true) {\n                Integer score = scores.get(&quot;\u5c0f\u660e&quot;);\n                Integer newScore = score + 1;\n                boolean b = scores.replace(&quot;\u5c0f\u660e&quot;, score, newScore);\n                if (b) {\n                    break;\n                }\n            }\n        }\n\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260115-193810-Uz.png\" alt=\"20260115-193810-Uz.png\" \/><\/p>\n<p>\u4f7f\u7528scores.replace\u52a0\u81ea\u65cb\u7684\u65b9\u5f0f\u4fdd\u8bc1\u4e86\u7ec4\u5408\u64cd\u4f5c\u7684\u7ebf\u7a0b\u5b89\u5168\u3002<\/p>\n<p>\u7c7b\u4f3c\u7684\u7ec4\u5408\u64cd\u4f5c\u7684\u5e38\u7528\u65b9\u6cd5\u8fd8\u6709putlfAbsent\uff0c\u7b49\u4ef7\u4e8e\u4e0b\u9762\u4ee3\u7801\u3002<\/p>\n<pre>if (!map.containsKey(key))\n    return map.put(key, value)\uff1b\nelse\n    return map.get(key);\n}<\/pre>\n<h2 id=\"h2-6\">CopyOnWriteArrayList<\/h2>\n<p>\u8bde\u751f\u539f\u56e0\uff1a<br \/>\nVector\u548cSynchronizedList\u7684\u9501\u7684\u7c92\u5ea6\u592a\u5927\uff0c\u5e76\u53d1\u6548\u7387\u76f8\u5bf9\u6bd4\u8f83\u4f4e\uff0c\u5e76\u4e14\u8fed\u4ee3\u65f6\u65e0\u6cd5\u7f16\u8f91<br \/>\nCopy-On-Write\u5e76\u53d1\u5bb9\u5668\u8fd8\u5305\u62ecCopyOnWriteArraySet\uff0c\u7528<br \/>\n\u6765\u66ff\u4ee3\u540c\u6b65Set<\/p>\n<h3 id=\"h3-7\">\u7b80\u4ecb<\/h3>\n<p>CopyOnWriteArrayList \u662f Java \u96c6\u5408\u6846\u67b6\u4e2d\u4e00\u4e2a\u7ebf\u7a0b\u5b89\u5168\u7684 List \u5b9e\u73b0\u7c7b\uff0c\u5b83\u662f ArrayList \u7684\u5e76\u53d1\u7248\u672c\uff0c\u9002\u7528\u4e8e\u8bfb\u591a\u5199\u5c11\u7684\u573a\u666f\u3002\u5176\u6838\u5fc3\u601d\u60f3\u662f\u5199\u65f6\u590d\u5236\uff08Copy-On-Write, \u7b80\u79f0 COW\uff09\uff0c\u5373\u5728\u8fdb\u884c\u5199\u64cd\u4f5c\uff08\u5982\u6dfb\u52a0\u3001\u4fee\u6539\u5143\u7d20\uff09\u65f6\uff0c\u5e76\u4e0d\u4f1a\u76f4\u63a5\u4fee\u6539\u539f\u59cb\u6570\u7ec4\uff0c\u800c\u662f\u5148\u590d\u5236\u4e00\u4efd\u5f53\u524d\u6570\u7ec4\u7684\u526f\u672c\uff0c\u5728\u526f\u672c\u4e0a\u8fdb\u884c\u4fee\u6539\u64cd\u4f5c\uff0c\u5b8c\u6210\u540e\u518d\u5c06\u5f15\u7528\u6307\u5411\u65b0\u7684\u6570\u7ec4\uff0c\u4ece\u800c\u4fdd\u8bc1\u8bfb\u64cd\u4f5c\u7684\u7ebf\u7a0b\u5b89\u5168\u6027\u3002<\/p>\n<p>\u8fd9\u79cd\u673a\u5236\u4f7f\u5f97\u8bfb\u64cd\u4f5c\u53ef\u4ee5\u65e0\u9501\u6267\u884c\uff0c\u63d0\u9ad8\u4e86\u5e76\u53d1\u8bfb\u53d6\u7684\u6027\u80fd\u3002\u7531\u4e8e\u5199\u64cd\u4f5c\u6d89\u53ca\u6570\u7ec4\u590d\u5236\uff0c\u56e0\u6b64\u5728\u5199\u64cd\u4f5c\u9891\u7e41\u7684\u573a\u666f\u4e0b\uff0c\u6027\u80fd\u4f1a\u53d7\u5230\u5f71\u54cd\uff0c\u540c\u65f6\u4e5f\u4f1a\u5e26\u6765\u989d\u5916\u7684\u5185\u5b58\u5f00\u9500\u3002<\/p>\n<h3 id=\"h3-8\">\u9002\u7528\u573a\u666f<\/h3>\n<p>\u9002\u7528\u573a\u666f\uff1a<\/p>\n<ol>\n<li>\u8bfb\u64cd\u4f5c\u53ef\u4ee5\u5c3d\u53ef\u80fd\u5730\u5feb\uff0c\u800c\u5199\u5373\u4f7f\u6162\u4e00\u4e9b\u4e5f\u6ca1\u6709\u592a\u5927\u5173\u7cfb<\/li>\n<li>\u8bfb\u591a\u5199\u5c11\uff1a\u9ed1\u540d\u5355\uff0c\u6bcf\u65e5\u66f4\u65b0\uff1b\u76d1\u542c\u5668\uff1a\u8fed\u4ee3\u64cd\u4f5c\u8fdc\u591a\u4f59\u4fee\u6539\u64cd\u4f5c<\/li>\n<\/ol>\n<h3 id=\"h3-9\">\u8bfb\u5199\u89c4\u5219\uff1a<\/h3>\n<ol>\n<li>\u56de\u987e\u8bfb\u5199\u9501\uff1a\u8bfb\u8bfb\u5171\u4eab\u3001\u5176\u4ed6\u90fd\u4e92\u65a5\uff08\u5199\u5199\u4e92\u65a5\u3001\u8bfb\u5199\u4e92\u65a5\u3001\u5199\u8bfb\u4e92\u65a5\uff09<\/li>\n<li>\u8bfb\u5199\u9501\u89c4\u5219\u7684\u5347\u7ea7\uff1a\u8bfb\u53d6\u662f\u5b8c\u5168\u4e0d\u7528\u52a0\u9501\u7684\uff0c\u5e76\u4e14\u66f4\u5389\u5bb3\u7684\u662f\uff0c\u5199\u5165\u4e5f\u4e0d\u4f1a\u963b\u585e\u8bfb\u53d6\u64cd\u4f5c\u3002\u53ea\u6709\u5199\u5165\u548c\u5199\u5165\u4e4b\u95f4\u9700\u8981\u8fdb\u884c\u540c\u6b65\u7b49\u5f85<\/li>\n<li>\u8bfb\u53d6\u8fed\u4ee3\u7684\u65f6\u5019\uff0c\u4f1a\u5148\u521b\u5efa\u526f\u672c\uff0c\u5229\u7528\u526f\u672c\u8fdb\u884c\u8fed\u4ee3\uff0c\u4f46\u662f\u5728\u8fed\u4ee3\u8fc7\u7a0b\u4e2d\u5bf9\u6570\u636e\u8fdb\u884c\u64cd\u4f5c\uff0c\u64cd\u4f5c\u7684\u662f\u539f\u6570\u636e\uff0c\u548c\u521b\u5efa\u7684\u526f\u672c\u6ca1\u6709\u5173\u7cfb\uff0c\u6240\u4ee5\u8fed\u4ee3\u65e0\u611f\u77e5\u3002<\/li>\n<\/ol>\n<p>\u5199\u5165\u64cd\u4f5c\u6e90\u7801\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260115-202126-6P.png\" alt=\"20260115-202126-6P.png\" \/><\/p>\n<p>\u6848\u4f8b\u5206\u6790\uff1a<\/p>\n<pre>package collections.copyonwrite;\n\nimport java.util.Iterator;\nimport java.util.concurrent.CopyOnWriteArrayList;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u5bf9\u6bd4\u4e24\u4e2a\u8fed\u4ee3\u5668\n *\/\npublic class CopyOnWriteArrayListDemo2 {\n\n    public static void main(String[] args) throws InterruptedException {\n        CopyOnWriteArrayList&lt;Integer&gt; list = new CopyOnWriteArrayList&lt;&gt;(new Integer[]{1, 2, 3});\n\n        System.out.println(list);\n\n        Iterator&lt;Integer&gt; itr1 = list.iterator();\n\n        list.remove(2);\n        Thread.sleep(1000);\n        System.out.println(list);\n\n        Iterator&lt;Integer&gt; itr2 = list.iterator();\n\n        itr1.forEachRemaining(System.out::println);\n        itr2.forEachRemaining(System.out::println);\n\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260115-201522-IN.png\" alt=\"20260115-201522-IN.png\" \/><\/p>\n<p>\u8fed\u4ee3\u56681\u521b\u5efa\u540e\uff0c\u4fee\u6539\u6570\u636e\uff0c\u5e76\u4e0d\u4f1a\u5f71\u54cd\u8fed\u4ee3\u56681\u7684\u6570\u636e\u5185\u5bb9\uff0c\u8fed\u4ee3\u56682\u540e\u521b\u5efa\u7684\uff0c\u5219\u662f\u4fee\u6539\u540e\u7684\u5185\u5bb9\u3002<\/p>\n<h3 id=\"h3-10\">CopyOnWriteArrayList\u7684\u7f3a\u70b9<\/h3>\n<ol>\n<li>\u6570\u636e\u4e00\u81f4\u6027\u95ee\u9898\uff1aCopyOnWrite\u5bb9\u5668\u53ea\u80fd\u4fdd\u8bc1\u6570\u636e\u7684\u6700\u7ec8\u4e00\u81f4\u6027\uff0c\u4e0d\u80fd\u4fdd\u8bc1\u6570\u636e\u7684\u5b9e\u65f6\u4e00\u81f4\u6027\u3002\u6240\u4ee5\u5982\u679c\u4f60\u5e0c\u671b\u5199\u5165\u7684\u6570\u636e\uff0c\u9a6c\u4e0a\u80fd\u8bfb\u5230\uff0c\u8bf7\u4e0d\u8981\u4f7f\u7528CopyOnWrite\u5bb9\u5668\u3002<\/li>\n<li>\u5185\u5b58\u5360\u7528\u95ee\u9898\uff1a\u56e0\u4e3aCopyOnWrite\u7684\u5199\u662f\u590d\u5236\u673a\u5236\uff0c\u6240\u4ee5\u5728\u8fdb\u884c\u5199\u64cd\u4f5c\u7684\u65f6\u5019\uff0c\u5185\u5b58\u91cc\u4f1a\u540c\u65f6\u9a7b\u624e\u4e24\u4e2a\u5bf9\u8c61\u7684\u5185\u5b58\u3002<\/li>\n<\/ol>\n<h2 id=\"h2-11\">\u5e76\u53d1\u961f\u5217Queue\uff1a\u963b\u585e\u961f\u5217<\/h2>\n<p>\u5404\u5e76\u53d1\u961f\u5217\u5173\u7cfb\u56fe\uff1a<\/p>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260117-104713-Ss.png\" alt=\"20260117-104713-Ss.png\" \/><\/p>\n<h3 id=\"h3-12\">BlockingQueue\u963b\u585e\u961f\u5217\u7b80\u4ecb<\/h3>\n<p>\u4ec0\u4e48\u662f\u963b\u57fa\u961f\u5217\uff1f<br \/>\n\u963b\u585e\u961f\u5217\u662f\u5177\u6709\u963b\u585e\u529f\u80fd\u7684\u961f\u5217\uff0c\u6240\u4ee5\u5b83\u9996\u5148\u662f\u4e00\u4e2a\u961f\u5217\uff0c\u5176\u6b21\u662f\u5177\u6709\u963b\u585e\u529f\u80fd\u3002<br \/>\n\u901a\u5e38\uff0c\u963b\u585e\u961f\u5217\u7684\u4e00\u7aef\u662f\u7ed9\u751f\u4ea7\u8005\u653e\u6570\u636e\u7528\uff0c\u53e6\u4e00\u7aef\u7ed9\u6d88\u8d39\u8005\u62ff\u6570\u636e\u7528\u3002\u963b\u585e\u961f\u5217\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u6240\u4ee5\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u90fd\u53ef\u4ee5\u662f\u591a\u7ebf\u7a0b\u7684<\/p>\n<p>\u963b\u585e\u529f\u80fd\uff1a\u4e24\u4e2a\u5e26\u6709\u963b\u585e\u529f\u80fd\u7684\u5e38\u7528\u65b9\u6cd5\u662f\uff1a<br \/>\ntake()\u65b9\u6cd5\uff1a\u83b7\u53d6\u5e76\u79fb\u9664\u961f\u5217\u7684\u5934\u7ed3\u70b9\uff0c\u4e00\u65e6\u5982\u679c\u6267\u884ctake\u7684\u65f6\u5019\uff0c\u961f\u5217\u91cc\u65e0\u6570\u636e\uff0c\u5219\u963b\u585e\uff0c\u76f4\u5230\u961f\u5217\u91cc\u6709\u6570\u636e<\/p>\n<p>put()\u65b9\u6cd5\uff1a\u63d2\u5165\u5143\u7d20\u3002\u4f46\u662f\u5982\u679c\u961f\u5217\u5df1\u6ee1\uff0c\u90a3\u4e48\u5c31\u65e0\u6cd5\u7ee7\u7eed\u63d2\u5165\uff0c\u5219\u963b\u585e\uff0c\u76f4\u5230\u961f\u5217\u91cc\u6709\u4e86\u7a7a\u95f2\u7a7a\u95f4<\/p>\n<p>add, remove, element\uff08\u8fd4\u56de\u5934\u8282\u70b9\uff09\uff1a\u7279\u70b9\u662f\u5982\u679c\u961f\u5217\u6ee1\u4e86\uff0c\u5bf9\u5217\u4e3a\u7a7a\uff0c\u5219\u4f1a\u629b\u51fa\u5f02\u5e38<\/p>\n<p>offer(\u6dfb\u52a0\u5143\u7d20), poll(\u53d6\u51fa\u4e00\u4e2a\u5143\u7d20\u5e76\u5220\u9664), peek(\u53d6\u51fa\u5143\u7d20\u4e0d\u5220\u9664)\uff1a\u7279\u70b9\u662f\u8fd4\u56de\u5e03\u5c14\u503c\uff0c\u4e0d\u4f1a\u629b\u5f02\u5e38<\/p>\n<h3 id=\"h3-13\">ArrayBlockingQueue<\/h3>\n<h4>\u7b80\u4ecb\u548c\u6848\u4f8b<\/h4>\n<p>\u7279\u70b9\uff1a<\/p>\n<ul>\n<li>\u6709\u754c<\/li>\n<li>\u6307\u5b9a\u5bb9\u91cf<\/li>\n<li>\u516c\u5e73\uff1a\u8fd8\u53ef\u4ee5\u6307\u5b9a\u662f\u5426\u9700\u8981\u4fdd\u8bc1\u516c\u5e73\uff0c\u5982\u679c\u60f3\u4fdd\u8bc1\u516c\u5e73\u7684\u8bdd\u90a3\u4e48\u7b49\u5f85\u4e86\u6700\u957f\u65f6\u95f4\u7684\u7ebf\u7a0b\u4f1a\u88ab\u4f18\u5148\u5904\u7406\uff0c\u4e0d\u8fc7\u8fd9\u4f1a\u540c\u65f6\u5e26\u6765\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u8017<\/li>\n<\/ul>\n<p>\u4f7f\u7528\u6848\u4f8b<br \/>\n\u670910\u4e2a\u9762\u8bd5\u8005\uff0c\u4e00\u5171\u53ea\u67091\u4e2a\u9762\u8bd5\u5b98\uff0c\u5927\u5385\u91cc\u67093\u4e2a\u4f4d\u5b50\u4f9b\u9762\u8bd5\u8005\u4f11\u606f\uff0c\u6bcf\u4e2a\u4eba\u7684\u9762\u8bd5\u65f6\u95f4\u662f10\u79d2\u5e7f\u6863\u5dde\u6240\u6709\u4eba\u9762\u8bd5\u7684\u573a\u666f<\/p>\n<p>\u6848\u4f8b\u4ee3\u7801\uff1a<\/p>\n<pre>package collections.queue;\n\nimport java.util.concurrent.ArrayBlockingQueue;\nimport java.util.concurrent.BlockingQueue;\n\n\/**\n * \u63cf\u8ff0\uff1a     TODO\n *\/\npublic class ArrayBlockingQueueDemo {\n\n    public static void main(String[] args) {\n\n        ArrayBlockingQueue&lt;String&gt; queue = new ArrayBlockingQueue&lt;String&gt;(3);\n\n        Interviewer r1 = new Interviewer(queue);\n        Consumer r2 = new Consumer(queue);\n        new Thread(r1).start();\n        new Thread(r2).start();\n    }\n}\n\nclass Interviewer implements Runnable {\n\n    BlockingQueue&lt;String&gt; queue;\n\n    public Interviewer(BlockingQueue queue) {\n        this.queue = queue;\n    }\n\n    @Override\n    public void run() {\n        System.out.println(&quot;10\u4e2a\u5019\u9009\u4eba\u90fd\u6765\u5566&quot;);\n        for (int i = 0; i &lt; 10; i++) {\n            String candidate = &quot;Candidate&quot; + i;\n            try {\n                queue.put(candidate);\n                System.out.println(&quot;\u5b89\u6392\u597d\u4e86&quot; + candidate);\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n        }\n        try {\n            queue.put(&quot;stop&quot;);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n    }\n}\n\nclass Consumer implements Runnable {\n\n    BlockingQueue&lt;String&gt; queue;\n\n    public Consumer(BlockingQueue queue) {\n\n        this.queue = queue;\n    }\n\n    @Override\n    public void run() {\n        try {\n            Thread.sleep(1000);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n        String msg;\n        try {\n            while(!(msg = queue.take()).equals(&quot;stop&quot;)){\n                System.out.println(msg + &quot;\u5230\u4e86&quot;);\n            }\n            System.out.println(&quot;\u6240\u6709\u5019\u9009\u4eba\u90fd\u7ed3\u675f\u4e86&quot;);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260117-111306-BN.png\" alt=\"20260117-111306-BN.png\" \/><\/p>\n<p>\u4e3b\u8981\u5728\u591a\u7ebf\u7a0b\u4e2d\uff0c\u4f7f\u7528\u4e86BlockingQueue\uff0c\u5bb9\u91cf\u4e3a3\u7684\u963b\u585e\u961f\u5217\uff0cput\u65b9\u6cd5\u6dfb\u52a0\u5143\u7d20\u548ctake\u65b9\u6cd5\u53d6\u5143\u7d20\u5b9e\u73b0\u6709\u5e8f\u7684\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u6a21\u5f0f\u3002<\/p>\n<h4>Linked BlockingQueue<\/h4>\n<ul>\n<li>\u65e0\u754c<\/li>\n<li>\u5bb9\u91cfInteger.MAX_VALUE<\/li>\n<li>\u5185\u90e8\u7ed3\u6784\uff1aNode\u3001\u4e24\u628a\u9501<\/li>\n<\/ul>\n<h4>Priority Blocking Queue<\/h4>\n<ul>\n<li>\u652f\u6301\u4f18\u5148\u7ea7<\/li>\n<li>\u81ea\u7136\u987a\u5e8f\uff08\u800c\u4e0d\u662f\u5148\u8fdb\u5148\u51fa\uff09<\/li>\n<li>\u65e0\u754c\u961f\u5217<\/li>\n<li>PriorityQueue \u7684\u7ebf\u7a0b\u5b89\u5168\u7248\u672c<\/li>\n<\/ul>\n<h4>SynchronousQueue<\/h4>\n<ul>\n<li>\u5b83\u7684\u5bb9\u91cf\u4e3a0<\/li>\n<li>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cSynchronousQueue\u7684\u5bb9\u91cf\u4e0d\u662f1\u800c\u662f0\uff0c\u56e0\u4e3aSynchronousQueue\u4e0d\u9700\u8981\u53bb\u6301\u6709\u5143\u7d20\uff0c\u5b83\u6240\u505a\u7684\u5c31\u662f\u76f4\u63a5\u4f20\u9012 ( direct handoff \uff09<\/li>\n<li>\u6548\u7387\u5f88\u9ad8<\/li>\n<li>SynchronousQueue\u6ca1\u6709peek\u7b49\u51fd\u6570\uff0c\u56e0\u4e3apeek\u7684\u542b\u4e49\u662f\u53d6\u51fa\u5934\u7ed3\u70b9\uff0c\u4f46\u662fSynchronousQueue\u7684\u5bb9\u91cf\u662f0\uff0c\u6240\u4ee5\u8fde\u5934\u7ed3\u70b9\u90fd\u6ca1\u6709\uff0c\u4e5f\u5c31\u6ca1\u6709peek\u65b9\u6cd5\u3002\u540c\u7406\uff0c\u6ca1\u6709iterate\u76f8\u5173\u65b9\u6cd5<\/li>\n<li>\u662f\u4e00\u4e2a\u6781\u597d\u7684\u7528\u6765\u76f4\u63a5\u4f20\u9012\u7684\u5e76\u53d1\u6570\u636e\u7ed3\u6784<\/li>\n<li>SynchronousQueue\u662f\u7ebf\u7a0b\u6c60Executors.newCachedThreadPool()\u4f7f\u7528\u7684\u963b\u585e\u961f\u5217<\/li>\n<\/ul>\n<h4>DelayQueue<\/h4>\n<ul>\n<li>\u5ef6\u8fdf\u961f\u5217\uff0c\u6839\u636e\u5ef6\u8fdf\u65f6\u95f4\u6392\u5e8f<\/li>\n<li>\u5143\u7d20\u9700\u8981\u5b9e\u73b0Delayed\u63a5\u53e3\uff0c\u89c4\u5b9a\u6392\u5e8f\u89c4\u5219<\/li>\n<\/ul>\n<h3 id=\"h3-14\">\u975e\u963b\u585e\u5e76\u53d1\u961f\u5217<\/h3>\n<p>\u5e76\u53d1\u5305\u4e2d\u7684\u975e\u963b\u585e\u961f\u5217\u53ea\u6709ConcurrentLinkedQueue\u8fd9\u4e00\u79cd\u987e\u540d\u601d\u4e49ConcurrentLinkedQueue\u662f\u4f7f\u7528\u94fe\u8868\u4f5c\u4e3a\u5176\u6570\u636e\u7ed3\u6784\u7684\uff0c\u4f7f\u7528 CAS \u975e\u963b\u585e\u7b97\u6cd5\u6765\u5b9e\u73b0\u7ebf\u7a0b\u5b89\u5168\uff08\u4e0d\u5177\u5907\u963b\u585e\u529f\u80fd\uff09\uff0c\u9002\u5408\u7528\u5728\u5bf9\u6027\u80fd\u8981\u6c42\u8f83\u9ad8\u7684\u5e76\u53d1\u573a\u666f\u3002\u7528\u7684\u76f8\u5bf9\u6bd4\u8f83\u5c11\u4e00\u4e9b<br \/>\n\u770b\u6e90\u7801\u7684offer\u65b9\u6cd5\u7684CAS\u601d\u60f3\uff0c\u5185\u6709p.casNext\u65b9\u6cd5\uff0c\u7528\u4e86UNSAFE.compareAndSwapObject<\/p>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u516d)\u2014\u2014\u5e76\u53d1\u5bb9\u5668-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260117-113037-FS.png\" alt=\"20260117-113037-FS.png\" \/><\/p>\n","excerpt":"<p>\u5e76\u53d1\u5bb9\u5668\u6982\u89c8 ConcurrentHashMap\uff1a\u7ebf\u7a0b\u5b89\u5168\u7684HashMap CopyOnWriteArrayList\uff1a\u7ebf\u7a0b\u5b89\u5168\u7684List BlockingQueue\uff1a\u8fd9\u662f\u4e00\u4e2a\u63a5\u53e3\uff0c\u8868\u793a\u963b\u585e\u961f\u5217\uff0c\u975e\u5e38\u9002\u5408\u7528\u4e8e\u4f5c\u4e3a\u6570\u636e\u5171\u4eab\u7684\u901a\u9053 ConcurrentLinkedQueue: \u9ad8\u6548\u7684\u975e\u963b\u585e\u5e76\u53d1\u961f\u5217\uff0c\u4f7f\u7528 \u94fe\u8868\u5b9e\u73b0\u3002\u53ef\u4ee5\u770b\u505a\u4e00\u4e2a\u7ebf &#8230;<\/p>\n","date":"2025-07-06 21:42:16","modified":"2026-03-05 17:05:46","categories":[{"id":80,"slug":"java","title":"java","description":"","parent":63,"post_count":45},{"id":231,"slug":"juc","title":"JUC","description":"","parent":80,"post_count":9},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":82,"slug":"java","title":"java","description":"","post_count":66},{"id":232,"slug":"juc","title":"JUC","description":"","post_count":9}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"views":["204"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2895,"type":"post","slug":"juc%e5%b9%b6%e5%8f%91%e7%bc%96%e7%a8%8b%e4%ba%94-cas%e5%8e%9f%e7%90%86final%e4%b8%8d%e5%8f%98%e6%80%a7","url":"https:\/\/qkongtao.cn\/?p=2895","status":"publish","title":"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027","title_plain":"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027","content":"<h2 id=\"h2-0\">\u4ec0\u4e48\u662fCAS\uff1f<\/h2>\n<h3 id=\"h3-1\">\u6982\u8ff0<\/h3>\n<p>\u5e76\u53d1\u573a\u666f\u4e0b\uff1a<\/p>\n<ol>\n<li>\n<p>\u6211\u8ba4\u4e3aV\u7684\u503c\u5e94\u8be5\u662fA\uff0c\u5982\u679c\u662f\u7684\u8bdd\u90a3\u6211\u5c31\u628a\u5b83\u6539\u6210B\uff0c\u5982\u679c\u4e0d\u662fA\uff08\u8bf4\u660e\u88ab\u522b\u4eba\u4fee\u6539\u8fc7\u4e86\uff09\uff0c\u90a3\u6211\u5c31\u4e0d\u4fee\u6539\u4e86\uff0c\u907f\u514d\u591a\u4eba\u540c\u65f6\u4fee\u6539\u5bfc\u81f4\u51fa\u9519<\/p>\n<\/li>\n<li>\n<p>CAS\u6709\u4e09\u4e2a\u64cd\u4f5c\u6570\uff1a\u5185\u5b58\u503cV\u3001\u9884\u671f\u503cA\u3001\u8981\u4fee\u6539\u7684\u503cB\uff0c\u5f53\u4e14\u4ec5\u5f53\u9884\u671f\u503cA\u548c\u5185\u5b58\u503cV\u76f8\u540c\u65f6\uff0c\u624d\u5c06\u5185\u5b58\u503c\u4fee\u6539\u4e3aB\uff0c\u5426\u5219\u4ec0\u4e48\u90fd\u4e0d\u505a\u3002\u6700\u540e\u8fd4\u56de\u73b0\u5728\u7684V\u503c<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"h3-2\">\u5e94\u7528\u573a\u666f<\/h3>\n<ol>\n<li>\u4e50\u89c2\u9501<\/li>\n<li>\u5e76\u53d1\u5bb9\u5668<\/li>\n<li>\u539f\u5b50\u7c7b<\/li>\n<\/ol>\n<h3 id=\"h3-3\">\u5206\u6790\u5728Java\u4e2d\u662f\u5982\u4f55\u5229\u7528CAS\u5b9e\u73b0\u539f\u5b50\u64cd\u4f5c\u7684\uff1f<\/h3>\n<ol>\n<li>AtomicInteger\u52a0\u8f7dUnsafe\u5de5\u5177\uff0c\u7528\u6765\u76f4\u63a5\u64cd\u4f5c\u5185\u5b58\u6570\u636e\u7528Unsafe\u6765\u5b9e\u73b0\u5e95\u5c42\u64cd\u4f5c<\/li>\n<li>\u7528volatile\u4fee\u9970value\u5b57\u6bb5\uff0c\u4fdd\u8bc1\u53ef\u89c1\u6027<\/li>\n<\/ol>\n<p>getAndAddInt\u65b9\u6cd5\u5206\u6790<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-173358-nA.png\" alt=\"20260114-173358-nA.png\" \/><\/p>\n<h3 id=\"h3-4\">Unsafe\u7c7b<\/h3>\n<p>Unsafe\u662fCAS\u7684\u6838\u5fc3\u7c7b\u3002Java\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95ee\u5e95\u5c42\u64cd\u4f5c\u7cfb\u7edf\uff0c\u800c\u662f\u901a\u8fc7\u672c\u5730\uff08native\uff09\u65b9\u6cd5\u6765\u8bbf\u95ee\u3002\u4e0d\u8fc7\u5c3d\u7ba1\u5982\u6b64\uff0cJVM\u8fd8\u662f\u5f00\u4e86\u4e00\u4e2a\u540e\u95e8\uff0cJDK\u4e2d\u6709\u4e00\u4e2a\u7c7bUnsafe\uff0c\u5b83\u63d0\u4f9b\u4e86\u786c\u4ef6\u7ea7\u522b\u7684\u539f\u5b50\u64cd\u4f5c\u3002<br \/>\nvalueOffset\u8868\u793a\u7684\u662f\u53d8\u91cf\u503c\u5728\u5185\u5b58\u4e2d\u7684\u504f\u79fb\u5730\u5740\uff0c\u56e0\u4e3a<br \/>\nUnsafe\u5c31\u662f\u6839\u636e\u5185\u5b58\u504f\u79fb\u5730\u5740\u83b7\u53d6\u6570\u636e\u7684\u539f\u503c\u7684\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u80fd\u901a\u8fc7unsafe\u6765\u5b9e\u73b0CAS\u4e86<\/p>\n<p>Unsafe\u7c7b\u4e2d\u7684compareAndSwaplnt\u65b9\u6cd5\uff1a<br \/>\n\u65b9\u6cd5\u4e2d\u5148\u60f3\u529e\u6cd5\u62ff\u5230\u53d8\u91cfvalue\u5728\u5185\u5b58\u4e2d\u7684\u5730\u5740\u3002<br \/>\n\u901a\u8fc7Atomic::cmpxchg\u5b9e\u73b0\u539f\u5b50\u6027\u7684\u6bd4\u8f83\u548c\u66ff\u6362\uff0c\u5176\u4e2d\u53c2\u6570x\u662f\u5373\u5c06\u66f4\u65b0\u7684\u503c\uff0c\u53c2\u6570e\u662f\u539f\u5185\u5b58\u7684\u503c\u3002\u81f3\u6b64\uff0c\u6700\u7ec8\u5b8c\u6210\u4e86CAS\u7684\u5168\u8fc7\u7a0b\u3002<\/p>\n<h3 id=\"h3-5\">CAS\u7f3a\u70b9<\/h3>\n<p>ABA\u95ee\u9898\uff1a\u83b7\u53d6\u5230\u503c\u8fd8\u672a\u4fee\u6539\u5df2\u7ecf\u88ab\u5176\u4ed6\u7ebf\u7a0b\u4fee\u6539\u5bfc\u81f4\u4e00\u81f4\u4e0d\u4f1a\u4fee\u6539\uff08\u53ef\u7528\u7248\u672c\u540e\u65b9\u6cd5\u89e3\u51b3\uff09<br \/>\n\u81ea\u65cb\u65f6\u95f4\u8fc7\u957f\uff08do while\u5faa\u73af\uff09<\/p>\n<h2 id=\"h2-6\">final\u5173\u952e\u5b57\u548c\u4e0d\u53d8\u6027<\/h2>\n<h3 id=\"h3-7\">\u4ec0\u4e48\u662f\u4e0d\u53d8\u6027\uff08Immutable\uff09<\/h3>\n<p>\u5982\u679c\u5bf9\u8c61\u5728\u88ab\u521b\u5efa\u540e\uff0c\u72b6\u6001\u5c31\u4e0d\u80fd\u88ab\u4fee\u6539\uff0c\u90a3\u4e48\u5b83\u5c31\u662f\u4e0d\u53ef\u53d8\u7684<br \/>\n\u4f8b\u5b50\uff1aperson\u5bf9\u8c61\uff0cage\u548cname\u90fd\u4e0d\u80fd\u518d\u53d8<br \/>\n\u5177\u6709\u4e0d\u53d8\u6027\u7684\u5bf9\u8c61\u4e00\u5b9a\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u5bf9\u5176\u91c7\u53d6\u4efb\u4f55\u989d\u5916\u7684\u5b89\u5168\u63aa\u65bd\uff0c\u4e5f\u80fd\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168<\/p>\n<h3 id=\"h3-8\">final\u7684\u4f5c\u7528<\/h3>\n<p>\u65e9\u671f<br \/>\n\u9501\u5b9a<br \/>\n\u6548\u7387\uff1a\u65e9\u671f\u7684Java\u5b9e\u73b0\u7248\u672c\u4e2d\uff0c\u4f1a\u5c06final\u65b9\u6cd5\u8f6c\u4e3a\u5185\u5d4c\u8c03\u7528<\/p>\n<p>\u73b0\u5728<br \/>\n\u7c7b\u9632\u6b62\u88ab\u7ee7\u627f\u3001\u65b9\u6cd5\u9632\u6b62\u88ab\u91cd\u5199\u3001\u53d8\u91cf\u9632\u6b62\u88ab\u4fee\u6539<br \/>\n\u5929\u751f\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u800c\u4e0d\u9700\u8981\u989d\u5916\u7684\u540c\u6b65\u5f00\u9500<\/p>\n<h3 id=\"h3-9\">final\u4fee\u9970\u53d8\u91cf<\/h3>\n<p>\u542b\u4e49\uff1a\u88abfinal\u4fee\u9970\u7684\u53d8\u91cf\uff0c\u610f\u5473\u7740\u503c\u4e0d\u80fd\u88ab\u4fee\u6539\u3002\u5982\u679c\u53d8\u91cf\u662f\u5bf9\u8c61\uff0c\u90a3\u4e48\u5bf9\u8c61\u7684\u5f15\u7528\u4e0d\u80fd\u53d8\uff0c\u4f46\u662f\u5bf9\u8c61\u81ea\u8eab\u7684\u5185\u5bb9\u4f9d\u7136\u53ef\u4ee5\u53d8\u5316<\/p>\n<h4>\u8d4b\u503c\u65f6\u673a<\/h4>\n<p>\u5c5e\u6027\u88ab\u58f0\u660e\u4e3afinal\u540e\uff0c\u8be5\u53d8\u91cf\u5219\u53ea\u80fd\u88ab\u8d4b\u503c\u4e00\u6b21\u3002\u4e14\u4e00\u65e6\u88ab\u8d4b\u503c\uff0cfinal\u7684\u53d8\u91cf\u5c31\u4e0d\u80fd\u518d\u88ab\u6539\u53d8\uff0c\u5982\u8bba\u5982\u4f55\u4e5f\u4e0d\u4f1a\u53d8<\/p>\n<p>final instance variable \uff08\u7c7b\u4e2d\u7684final\u5c5e\u6027\uff09<br \/>\n\u7b2c\u4e00\u79cd\u662f\u5728\u58f0\u660e\u53d8\u91cf\u7684\u7b49\u53f7\u53f3\u8fb9\u76f4\u63a5\u8d4b\u503c<br \/>\n\u7b2c\u4e8c\u79cd\u5c31\u662f\u6784\u9020\u51fd\u6570\u4e2d\u8d4b\u503c<br \/>\n\u7b2c\u4e09\u5c31\u662f\u5728\u7c7b\u7684\u521d\u59cb\u4ee3\u7801\u5757\u4e2d\u8d4b\u503c\uff08\u4e0d\u5e38\u7528\uff09<\/p>\n<p>final static variable\uff08\u7c7b\u4e2d\u7684static final\u5c5e\u6027\uff09<br \/>\n\u4e24\u4e2a\u8d4b\u503c\u65f6\u673a\uff1a\u9664\u4e86\u5728\u58f0\u660e\u53d8\u91cf\u7684\u7b49\u53f7\u53f3\u8fb9\u76f4\u63a5\u8d4b\u503c\u5916\uff0cstatic final\u53d8\u91cf\u8fd8\u53ef\u4ee5\u7528static\u521d\u59cb\u4ee3\u7801\u5757\u8d4b\u503c\uff0c\u4f46\u662f\u4e0d\u80fd\u7528\u666e\u901a\u7684\u521d\u59cb\u4ee3\u7801\u5757\u8d4b\u503c<\/p>\n<p>final local variable\uff08\u65b9\u6cd5\u4e2d\u7684final\u53d8\u91cf\uff09<br \/>\n\u548c\u524d\u9762\u4e24\u79cd\u4e0d\u540c\uff0c\u7531\u4e8e\u8fd9\u91cc\u7684\u53d8\u91cf\u662f\u5728\u65b9\u6cd5\u91cc\u7684\uff0c\u6240\u4ee5\u6ca1\u6709\u6784\u9020\u51fd\u6570\uff0c\u4e5f\u4e0d\u5b58\u5728\u521d\u59cb\u4ee3\u7801\u5757<br \/>\nfinal local variable\u4e0d\u89c4\u5b9a\u8d4b\u503c\u65f6\u673a\uff0c\u53ea\u8981\u6c42\u5728\u4f7f\u7528\u524d\u5fc5\u987b\u8d4b\u503c\uff0c\u8fd9\u548c\u65b9\u6cd5\u4e2d\u7684\u975efinal\u53d8\u91cf\u7684\u8981\u6c42\u4e5f\u662f\u4e00\u6837\u7684<br \/>\n\u4e3a\u4ec0\u4e48\u8981\u89c4\u5b9a\u8d4b\u503c\u65f6\u673a\uff1f<br \/>\n<strong>\u5982\u679c\u521d\u59cb\u5316\u4e0d\u8d4b\u503c\uff0c\u540e\u7eed\u8d4b\u503c\uff0c\u5c31\u662f\u4ecenull\u53d8\u6210\u4f60\u7684\u8d4b\u503c\uff0c\u8fd9\u5c31\u8fdd\u53cdfinal\u4e0d\u53d8\u7684\u539f\u5219\u4e86\uff01<\/strong><\/p>\n<h3 id=\"h3-10\">final\u4fee\u9970\u65b9\u6cd5<\/h3>\n<ol>\n<li>\u6784\u9020\u65b9\u6cd5\u4e0d\u5141\u8bb8final\u4fee\u9970<\/li>\n<li>\u4e0d\u53ef\u88ab\u91cd\u5199\uff0c\u4e5f\u5c31\u662f\u4e0d\u80fd\u88aboverride\uff0c\u5373\u4fbf\u662f\u5b50\u7c7b\u6709\u540c\u6837\u540d\u5b57\u7684\u65b9\u6cd5\uff0c\u90a3\u4e5f\u4e0d\u662foverride\uff0c\u8fd9\u4e2a\u548cstatic\u65b9\u6cd5\u662f\u4e00\u4e2a\u9053\u7406<\/li>\n<li>\u5f15\u7533\uff1astatic\u65b9\u6cd5\u4e0d\u80fd\u88ab\u91cd\u5199\uff08\u4f46\u662f\u53ef\u4ee5\u6709\u540c\u540d\u7684\u65b9\u6cd5\uff0c\u662f\u56e0\u4e3astatic\u58f0\u660e\u65b9\u6cd5\u65f6\u4e0e\u4e3b\u7c7b\u7ed1\u5b9a\u4e86\uff0c\u7ee7\u627f\u540e\u8be5\u65b9\u6cd5\u540e\u7684\u540c\u540d\u65b9\u6cd5\u548c\u4e3b\u7c7b\u7684\u540c\u540d\u65b9\u6cd5\u662f\u72ec\u7acb\u7684\uff0c\u6ca1\u6709\u5173\u7cfb\uff09<\/li>\n<\/ol>\n<h3 id=\"h3-11\">final\u4fee\u9970\u7c7b<\/h3>\n<p>\u4e0d\u53ef\u88ab\u7ee7\u627f<br \/>\n\u4f8b\u5982\u5178\u578b\u7684String\u7c7b\u5c31\u662ffinal\u7684\uff0c\u6211\u4eec\u4ece\u6ca1\u89c1\u8fc7\u54ea\u4e2a\u7c7b\u662f\u7ee7\u627fString\u7c7b\u7684<\/p>\n<p>final\u7684\u6ce8\u610f\u70b9\uff1a<br \/>\nfinal\u4fee\u9970\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u53ea\u662f\u5bf9\u8c61\u7684\u5f15\u7528\u4e0d\u53ef\u53d8\uff0c\u800c\u5bf9\u8c61\u672c\u8eab\u7684\u5c5e\u6027\u662f\u53ef\u4ee5\u53d8\u5316\u7684<br \/>\nfinal\u4f7f\u7528\u539f\u5219\uff1a\u826f\u597d\u7684\u7f16\u7a0b\u4e60\u60ef<\/p>\n<h3 id=\"h3-12\">\u4e0d\u53d8\u6027\u548cfinal\u7684\u5173\u7cfb<\/h3>\n<p>\u5982\u4f55\u5229\u7528final\u5b9e\u73b0\u5bf9\u8c61\u4e0d\u53ef\u53d8<br \/>\n\u628a\u6240\u6709\u5c5e\u6027\u90fd\u58f0\u660e\u4e3afinal?<br \/>\n\u7b54\u6848\u662f\u4e0d\u884c\u7684\uff0c\u6709\u5c5e\u6027\u662f\u5bf9\u8c61\u88abfinal\u4fee\u9970\uff0c\u4ecd\u7136\u662f\u53ef\u53d8\u7684\u3002<br \/>\n\u4e00\u4e2a\u5c5e\u6027\u662f\u5bf9\u8c61\u7c7b\u578b\u7684\u4e0d\u53ef\u53d8\u5bf9\u8c61\u7684\u6b63\u786e\u4f8b\u5b50<br \/>\n<strong>\u4f7f\u7528private\u4fee\u9970\u5bf9\u8c61\u5c5e\u6027<\/strong><\/p>\n<pre>package immutable;\n\nimport java.util.HashSet;\nimport java.util.Set;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u4e00\u4e2a\u5c5e\u6027\u662f\u5bf9\u8c61\uff0c\u4f46\u662f\u6574\u4f53\u4e0d\u53ef\u53d8\uff0c\u5176\u4ed6\u7c7b\u65e0\u6cd5\u4fee\u6539set\u91cc\u9762\u7684\u6570\u636e\n *\/\npublic class ImmutableDemo {\n\n    private final Set&lt;String&gt; students = new HashSet&lt;&gt;();\n\n    public ImmutableDemo() {\n        students.add(&quot;\u674e\u5c0f\u7f8e&quot;);\n        students.add(&quot;\u738b\u58ee&quot;);\n        students.add(&quot;\u5f90\u798f\u8bb0&quot;);\n    }\n\n    public boolean isStudent(String name) {\n        return students.contains(name);\n    }\n}<\/pre>\n<p>\u5bf9\u8c61\u4e0d\u53ef\u53d8\u9700\u8981\u6ee1\u8db3\u6761\u4ef6\uff1a<br \/>\n\u5bf9\u8c61\u521b\u5efa\u540e\uff0c\u5176\u72b6\u6001\u5c31\u4e0d\u80fd\u4fee\u6539<br \/>\n\u6240\u6709\u5c5e\u6027\u90fd\u662ffinal\u4fee\u9970\u7684<br \/>\n\u5bf9\u8c61\u521b\u5efa\u8fc7\u7a0b\u4e2d\u6ca1\u6709\u53d1\u751f\u9038\u51fa<\/p>\n<h3 id=\"h3-13\">\u628a\u53d8\u91cf\u5199\u5728\u7ebf\u7a0b\u5185\u90e8\u4e00\u6808\u5c01\u95ed<\/h3>\n<p>\u5728\u65b9\u6cd5\u91cc\u65b0\u5efa\u7684\u5c40\u90e8\u53d8\u91cf\uff0c\u5b9e\u9645\u4e0a\u662f\u5b58\u50a8\u5728\u6bcf\u4e2a\u7ebf\u7a0b\u79c1\u6709\u7684\u6808\u7a7a\u95f4\uff0c\u800c\u6bcf\u4e2a\u6808\u7684\u5360\u7a7a\u95f4\u662f\u4e0d\u80fd\u88ab\u5176\u4ed6\u7ebf\u7a0b\u6240\u8bbf\u95ee\u5230\u7684\uff0c\u6240\u4ee5\u4e0d\u4f1a\u6709\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898\u3002\u8fd9\u5c31\u662f\u8457\u540d\u7684\u201c\u6808\u5c01\u95ed\u301e\u6280\u672f\uff0c\u662f\u201c\u7ebf\u7a0b\u5c01\u95ed\u301e\u6280\u672f\u7684\u4e00\u79cd\u60c5\u51b5\u3002<\/p>\n<p>\u4ee3\u7801\u6848\u4f8b<\/p>\n<pre>package immutable;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u6808\u5c01\u95ed\u7684\u4e24\u79cd\u60c5\u51b5\uff0c\u57fa\u672c\u53d8\u91cf\u548c\u5bf9\u8c61 \u5148\u6f14\u793a\u7ebf\u7a0b\u4e89\u62a2\u5e26\u6765\u9519\u8bef\u7ed3\u679c\uff0c\u7136\u540e\u628a\u53d8\u91cf\u653e\u5230\u65b9\u6cd5\u5185\uff0c\u60c5\u51b5\u5c31\u53d8\u4e86\n *\/\npublic class StackConfinement implements Runnable {\n\n    int index = 0;\n\n    public void inThread() {\n        int neverGoOut = 0;\n        synchronized (this) {\n            for (int i = 0; i &lt; 10000; i++) {\n                neverGoOut++;\n            }\n        }\n\n        System.out.println(&quot;\u6808\u5185\u4fdd\u62a4\u7684\u6570\u5b57\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff1a&quot; + neverGoOut);\n    }\n\n    @Override\n    public void run() {\n        for (int i = 0; i &lt; 10000; i++) {\n            index++;\n        }\n        inThread();\n    }\n\n    public static void main(String[] args) throws InterruptedException {\n        StackConfinement r1 = new StackConfinement();\n        Thread thread1 = new Thread(r1);\n        Thread thread2 = new Thread(r1);\n        thread1.start();\n        thread2.start();\n        thread1.join();\n        thread2.join();\n        System.out.println(r1.index);\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-185900-7R.png\" alt=\"20260114-185900-7R.png\" \/><\/p>\n<h2 id=\"h2-14\">final\u4fee\u9970String\u6ce8\u610f\u70b9<\/h2>\n<p>\u6848\u4f8b\u4e00\uff1a<\/p>\n<pre>public class FinalStringDemo1 {\n\n    public static void main(String[] args) {\n        String a = &quot;wukong2&quot;;\n        final String b = &quot;wukong&quot;;\n        String d = &quot;wukong&quot;;\n        String c = b + 2;\n        String e = d + 2;\n        System.out.println((a == c));\n        System.out.println((a == e));\n    }\n}<\/pre>\n<p>\u7ed3\u679c\u8f93\u51fa\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-191233-3P.png\" alt=\"20260114-191233-3P.png\" \/><\/p>\n<p>\u539f\u56e0\u662ffinal\u4fee\u9970\u65f6\uff0cb\u662f\u4e0d\u53ef\u53d8\u7684\uff0c\u5728\u8ba1\u7b97\u7ed3\u679c\u5df2\u7ecf\u56fa\u5b9a\u4e86\uff0c\u53d1\u73b0\u548ca\u4e00\u81f4\uff0c\u5c31\u4e0d\u4f1a\u91cd\u65b0\u521b\u5efa\u65b0\u7684String\u5bf9\u8c61\u3002<\/p>\n<p>\u6848\u4f8b\u4e8c\uff1a<\/p>\n<pre>public class FinalStringDemo2 {\n\n    public static void main(String[] args) {\n        String a = &quot;wukong2&quot;;\n        final String b = getDashixiong();\n        String c = b + 2;\n        System.out.println(a == c);\n\n    }\n\n    private static String getDashixiong() {\n        return &quot;wukong&quot;;\n    }\n}<\/pre>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e94)\u2014\u2014CAS\u539f\u7406&#038;final\u4e0d\u53d8\u6027-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-191726-4a.png\" alt=\"20260114-191726-4a.png\" \/><\/p>\n<p>\u539f\u56e0\u662ffinal\u4fee\u9970\u7684\u662f\u65b9\u6cd5\uff0c\u8fd4\u56de\u7684\u7ed3\u679c\u5177\u6709\u4e0d\u786e\u5b9a\u6027\uff0c\u662f\u8fd0\u884c\u65f6\u751f\u6210\u7684String\uff0c\u6240\u4ee5\u521b\u5efa\u4e86\u65b0\u7684Sting\u5bf9\u8c61\u3002<\/p>\n","excerpt":"<p>\u4ec0\u4e48\u662fCAS\uff1f \u6982\u8ff0 \u5e76\u53d1\u573a\u666f\u4e0b\uff1a \u6211\u8ba4\u4e3aV\u7684\u503c\u5e94\u8be5\u662fA\uff0c\u5982\u679c\u662f\u7684\u8bdd\u90a3\u6211\u5c31\u628a\u5b83\u6539\u6210B\uff0c\u5982\u679c\u4e0d\u662fA\uff08\u8bf4\u660e\u88ab\u522b\u4eba\u4fee\u6539\u8fc7\u4e86\uff09\uff0c\u90a3\u6211\u5c31\u4e0d\u4fee\u6539\u4e86\uff0c\u907f\u514d\u591a\u4eba\u540c\u65f6\u4fee\u6539\u5bfc\u81f4\u51fa\u9519 CAS\u6709\u4e09\u4e2a\u64cd\u4f5c\u6570\uff1a\u5185\u5b58\u503cV\u3001\u9884\u671f\u503cA\u3001\u8981\u4fee\u6539\u7684\u503cB\uff0c\u5f53\u4e14\u4ec5\u5f53\u9884\u671f\u503cA\u548c\u5185\u5b58\u503cV\u76f8\u540c\u65f6\uff0c &#8230;<\/p>\n","date":"2025-06-15 23:37:32","modified":"2026-03-05 17:05:24","categories":[{"id":80,"slug":"java","title":"java","description":"","parent":63,"post_count":45},{"id":231,"slug":"juc","title":"JUC","description":"","parent":80,"post_count":9},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":82,"slug":"java","title":"java","description":"","post_count":66},{"id":232,"slug":"juc","title":"JUC","description":"","post_count":9}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"bpu":["1|20260227"],"views":["180"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2893,"type":"post","slug":"juc%e5%b9%b6%e5%8f%91%e7%bc%96%e7%a8%8b-atomic%e5%8e%9f%e5%ad%90%e7%b1%bb%e5%8c%85","url":"https:\/\/qkongtao.cn\/?p=2893","status":"publish","title":"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305","title_plain":"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305","content":"<h2 id=\"h2-0\">atomic\u539f\u5b50\u7c7b\u6982\u8ff0<\/h2>\n<p>\u4ec0\u4e48\u662f\u539f\u5b50\u7c7b\uff1f<\/p>\n<p>\u4e0d\u53ef\u5206\u5272\uff0c\u4e00\u4e2a\u64cd\u4f5c\u662f\u4e0d\u53ef\u4e2d\u65ad\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5373\u4fbf\u662f\u591a\u7ebf\u7a0b\u7684\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u4fdd\u8bc1\uff0cjava\u4e2d\u662fjava.util.concurrent.atomic\u5305\u3002<\/p>\n<p>\u539f\u5b50\u7c7b\u6709\u4ec0\u4e48\u4f5c\u7528\uff1f<\/p>\n<ol>\n<li>\u539f\u5b50\u7c7b\u7684\u4f5c\u7528\u548c\u9501\u7c7b\u4f3c\uff0c\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5e76\u53d1\u60c5\u51b5\u4e0b\u7ebf\u7a0b\u5b89\u5168\u3002\u4e0d\u8fc7\u539f\u5b50\u7c7b\u76f8\u6bd4\u4e8e\u9501\uff0c\u6709\u4e00\u5b9a\u7684\u4f18\u52bf\uff1a<\/li>\n<li>\u7c92\u5ea6\u66f4\u7ec6\uff1a\u539f\u5b50\u53d8\u91cf\u53ef\u4ee5\u628a\u7ade\u4e89\u8303\u56f4\u7f29\u5c0f\u5230\u53d8\u91cf\u7ea7\u522b\uff0c\u8fd9\u662f\u6211\u4eec\u53ef\u4ee5\u83b7\u5f97\u7684\u6700\u7ec6\u7c92\u5ea6\u7684\u60c5\u51b5\u4e86\uff0c\u901a\u5e38\u9501\u7684\u7c92\u5ea6\u90fd\u8981\u5927\u4e8e\u539f\u5b50\u53d8\u91cf\u7684\u7c92\u5ea6<\/li>\n<li>\u6548\u7387\u66f4\u9ad8\uff1a\u901a\u5e38\uff0c\u4f7f\u7528\u539f\u5b50\u7c7b\u7684\u6548\u7387\u4f1a\u6bd4\u4f7f\u7528\u9501\u7684\u6548\u7387\u66f4\u9ad8\uff0c\u9664\u4e86\u9ad8\u5ea6\u7ade\u4e89\u7684\u60c5\u51b5<\/li>\n<\/ol>\n<h2 id=\"h2-1\">\u516d\u7c7b\u539f\u5b50\u7c7b<\/h2>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-015925-LV.png\" alt=\"20260114-015925-LV.png\" \/><\/p>\n<h3 id=\"h3-2\">Atomic*\u57fa\u672c\u7c7b\u578b\u539f\u5b50\u7c7b<\/h3>\n<p>Atomic*\u57fa\u672c\u7c7b\u578b\u539f\u5b50\u7c7b\uff1a<br \/>\nAtomicinteger\uff1a\u6574\u5f62\u539f\u5b50\u7c7b<br \/>\nAtomicLong\uff1a\u957f\u6574\u578b\u539f\u5b50\u7c7b<br \/>\nAtomicBoolean\uff1a\u5e03\u5c14\u578b\u539f\u5b50\u7c7b<\/p>\n<p>Atomic*\u57fa\u672c\u7c7b\u578b\u539f\u5b50\u7c7b\u5e38\u7528\u65b9\u6cd5(Atomicinteger\u4e3a\u4f8b)<\/p>\n<ol>\n<li>public final int get() \/\/\u83b7\u53d6\u5f53\u524d\u7684\u503c<\/li>\n<li>public final int getAndSet(int newValue) \/\/\u83b7\u53d6\u5f53\u524d\u7684\u503c\uff0c\u5e76\u8bbe\u7f6e\u65b0\u7684\u503c<\/li>\n<li>public final int getAndIncrement() \/\/\u4e2d\u53d6\u5f53\u524d\u7684\u503c\uff0c\u5e76\u81ea\u589e<\/li>\n<li>public final int getAndDecrementO \/\/\u83b7\u53d6\u5f53\u524d\u7684\u503c\uff0c\u5e76\u81ea\u51cf<\/li>\n<li>public final int getAndAdd(int delta) \/\/\u83b7\u53d6\u5f53\u524d\u7684\u503c\uff0c\u5e76\u52a0\u4e0a\u9884\u671f\u7684\u503c<\/li>\n<li>boolean compareAndSet(int expect, int update) \/\/\u5982\u679c\u8f93\u5165\u7684\u6570\u503c\u7b49\u4e8e\u9884\u671f\u503c\uff0c\u5219\u4ee5\u539f\u5b50\u65b9\u5f0f\u5c06\u8be5\u503c\u8bbe\u7f6e\u4e3a\u8f93\u5165\u503c\uff08update\uff09<\/li>\n<\/ol>\n<p>AtomicInteger\u6848\u4f8b\u6f14\u793a\u4ee3\u7801\u6f14\u793a\uff1a<\/p>\n<pre>package atomic;\n\nimport java.util.concurrent.atomic.AtomicInteger;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793aAtomicInteger\u7684\u57fa\u672c\u7528\u6cd5\uff0c\u5bf9\u6bd4\u975e\u539f\u5b50\u7c7b\u7684\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898\uff0c\u4f7f\u7528\u4e86\u539f\u5b50\u7c7b\u4e4b\u540e\uff0c\u4e0d\u9700\u8981\u52a0\u9501\uff0c\u4e5f\u53ef\u4ee5\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\u3002\n *\/\npublic class AtomicIntegerDemo1 implements Runnable {\n\n    private static final AtomicInteger atomicInteger = new AtomicInteger();\n\n    public void incrementAtomic() {\n        atomicInteger.getAndAdd(-1);\n    }\n\n    private static volatile int basicCount = 0;\n\n    public void incrementBasic() {\n        basicCount++;\n    }\n\n    public static void main(String[] args) throws InterruptedException {\n        AtomicIntegerDemo1 r = new AtomicIntegerDemo1();\n        Thread t1 = new Thread(r);\n        Thread t2 = new Thread(r);\n        t1.start();\n        t2.start();\n        t1.join();\n        t2.join();\n        System.out.println(&quot;\u539f\u5b50\u7c7b\u7684\u7ed3\u679c\uff1a&quot; + atomicInteger.get());\n        System.out.println(&quot;\u666e\u901a\u53d8\u91cf\u7684\u7ed3\u679c\uff1a&quot; + basicCount);\n    }\n\n    @Override\n    public void run() {\n        for (int i = 0; i &lt; 10000; i++) {\n            incrementAtomic();\n            incrementBasic();\n        }\n    }\n}<\/pre>\n<p>\u7ed3\u679c\u5982\u4e0b\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-021129-YT.png\" alt=\"20260114-021129-YT.png\" \/><\/p>\n<p>\u666e\u901a\u53d8\u91cf\u7684\u662f\u7ebf\u7a0b\u4e0d\u5b89\u5168\u7684<\/p>\n<h3 id=\"h3-3\">Atomic*\u539f\u5b50\u6570\u7ec4<\/h3>\n<p>AtomicIntegerArray atomicIntegerArray = new AtomicIntegerArray(1000);<\/p>\n<p>\u4ee3\u7801\u6f14\u793a\uff1a<\/p>\n<pre>package atomic;\n\nimport java.util.concurrent.atomic.AtomicIntegerArray;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u539f\u5b50\u6570\u7ec4\u7684\u4f7f\u7528\u65b9\u6cd5\n *\/\npublic class AtomicArrayDemo {\n\n    public static void main(String[] args) {\n        AtomicIntegerArray atomicIntegerArray = new AtomicIntegerArray(1000);\n        Incrementer incrementer = new Incrementer(atomicIntegerArray);\n        Decrementer decrementer = new Decrementer(atomicIntegerArray);\n        Thread[] threadsIncrementer = new Thread[100];\n        Thread[] threadsDecrementer = new Thread[100];\n        for (int i = 0; i &lt; 100; i++) {\n            threadsDecrementer[i] = new Thread(decrementer);\n            threadsIncrementer[i] = new Thread(incrementer);\n            threadsDecrementer[i].start();\n            threadsIncrementer[i].start();\n        }\n\n\/\/        Thread.sleep(10000);\n        for (int i = 0; i &lt; 100; i++) {\n            try {\n                threadsDecrementer[i].join();\n                threadsIncrementer[i].join();\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n        }\n\n        for (int i = 0; i &lt; atomicIntegerArray.length(); i++) {\n\/\/            if (atomicIntegerArray.get(i)!=0) {\n\/\/                System.out.println(&quot;\u53d1\u73b0\u4e86\u9519\u8bef&quot;+i);\n\/\/            }\n            System.out.println(atomicIntegerArray.get(i));\n        }\n        System.out.println(&quot;\u8fd0\u884c\u7ed3\u675f&quot;);\n    }\n}\n\nclass Decrementer implements Runnable {\n\n    private AtomicIntegerArray array;\n\n    public Decrementer(AtomicIntegerArray array) {\n        this.array = array;\n    }\n\n    @Override\n    public void run() {\n        for (int i = 0; i &lt; array.length(); i++) {\n            array.getAndDecrement(i);\n        }\n    }\n}\n\nclass Incrementer implements Runnable {\n\n    private AtomicIntegerArray array;\n\n    public Incrementer(AtomicIntegerArray array) {\n        this.array = array;\n    }\n\n    @Override\n    public void run() {\n        for (int i = 0; i &lt; array.length(); i++) {\n            array.getAndIncrement(i);\n        }\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-022756-MW.png\" alt=\"20260114-022756-MW.png\" \/><\/p>\n<p>\u6570\u7ec4\u5185\u5bb9\u5148\u51cf\u540e\u52a0\u6263\u6ca1\u6709\u51fa\u73b0\u591a\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898\u3002<\/p>\n<h3 id=\"h3-4\">Atomic*Reference\u5f15\u7528\u7c7b\u578b\u539f\u5b50\u7c7b<\/h3>\n<p>AtomicReference : AtomicReference\u7c7b\u7684\u4f5c\u7528\uff0c\u548c<br \/>\nAtomicinteger\u5e76\u6ca1\u6709\u672c\u8d28\u533a\u522b\uff0cAtomicinteger\u53ef\u4ee5\u8ba9\u4e00\u4e2a\u6574\u6570\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u800cAtomicReference\u53ef\u4ee5\u8ba9\u4e00\u4e2a\u5bf9\u8c61\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5f53\u7136\uff0cAtomicReference\u7684\u529f\u80fd\u660e\u663e\u6bd4Atomicinteger\u5f3a\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5bf9\u8c61\u91cc\u53ef\u4ee5\u5305\u542b\u5f88\u591a\u5c5e\u6027\u3002\u7528\u6cd5\u548cAtomicinteger\u7c7b\u4f3c\u3002<\/p>\n<p>\u4e3b\u8981\u4f7f\u7528\u65b9\u6cd5\u662f\uff1a<br \/>\nboolean compareAndSet(int expect, int update) \/\/\u5982\u679c\u8f93\u5165\u7684\u6570\u503c\u7b49\u4e8e\u9884\u671f\u503c\uff0c\u5219\u4ee5\u539f\u5b50\u65b9\u5f0f\u5c06\u8be5\u503c\u8bbe\u7f6e\u4e3a\u8f93\u5165\u503c\uff08update\uff09<\/p>\n<p>\u624b\u5199\u81ea\u65cb\u9501\u6848\u4f8b<\/p>\n<pre>package lock.spinlock;\n\nimport java.util.concurrent.atomic.AtomicReference;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u81ea\u65cb\u9501\n *\/\npublic class SpinLock {\n\n    private AtomicReference&lt;Thread&gt; sign = new AtomicReference&lt;&gt;();\n\n    public void lock() {\n        Thread current = Thread.currentThread();\n        while (!sign.compareAndSet(null, current)) {\n            System.out.println(&quot;\u81ea\u65cb\u83b7\u53d6\u5931\u8d25\uff0c\u518d\u6b21\u5c1d\u8bd5&quot;);\n        }\n    }\n\n    public void unlock() {\n        Thread current = Thread.currentThread();\n        sign.compareAndSet(current, null);\n    }\n\n    public static void main(String[] args) {\n        SpinLock spinLock = new SpinLock();\n        Runnable runnable = new Runnable() {\n            @Override\n            public void run() {\n                System.out.println(Thread.currentThread().getName() + &quot;\u5f00\u59cb\u5c1d\u8bd5\u83b7\u53d6\u81ea\u65cb\u9501&quot;);\n                spinLock.lock();\n                System.out.println(Thread.currentThread().getName() + &quot;\u83b7\u53d6\u5230\u4e86\u81ea\u65cb\u9501&quot;);\n                try {\n                    Thread.sleep(300);\n                } catch (InterruptedException e) {\n                    e.printStackTrace();\n                } finally {\n                    spinLock.unlock();\n                    System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u4e86\u81ea\u65cb\u9501&quot;);\n                }\n            }\n        };\n        Thread thread1 = new Thread(runnable);\n        Thread thread2 = new Thread(runnable);\n        thread1.start();\n        thread2.start();\n    }\n}<\/pre>\n<p>\u4fdd\u8bc1\u4e86Thread\u7c7b\u578b\u539f\u5b50\u6027\uff0c\u591a\u7ebf\u7a0b\u65f6\uff0cThread\u53d8\u91cf\u4e0d\u4f1a\u88ab\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u4fee\u6539\u3002<\/p>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-024319-nn.png\" alt=\"20260114-024319-nn.png\" \/><\/p>\n<h3 id=\"h3-5\">Atomic**FieldUpdater\u628a\u666e\u901a\u53d8\u91cf\u5347\u7ea7\u4e3a\u5177\u6709\u539f\u5b50\u529f\u80fd<\/h3>\n<p>AtomicIntegerFieldUpdater\u5bf9\u666e\u901a\u53d8\u91cf\u8fdb\u884c\u5347\u7ea7<br \/>\n\u4f7f\u7528\u573a\u666f\uff1a\u5076\u5c14\u9700\u8981\u4e00\u4e2a\u539f\u5b50get-set\u64cd\u4f5c\uff0c\u6216\u8005\u65e0\u6cd5\u4fee\u6539\u7684\u53d8\u91cf\u3002 <\/p>\n<p>AtomicIntegerFieldUpdater\u7684\u7528\u6cd5\u6848\u4f8b\uff1a<\/p>\n<pre>package atomic;\n\nimport java.util.concurrent.atomic.AtomicIntegerFieldUpdater;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793aAtomicIntegerFieldUpdater\u7684\u7528\u6cd5\n *\/\npublic class AtomicIntegerFieldUpdaterDemo implements Runnable{\n\n    static Candidate tom;\n    static Candidate peter;\n\n    public static AtomicIntegerFieldUpdater&lt;Candidate&gt; scoreUpdater = AtomicIntegerFieldUpdater\n            .newUpdater(Candidate.class, &quot;score&quot;);\n\n    @Override\n    public void run() {\n        for (int i = 0; i &lt; 10000; i++) {\n            peter.score++;\n            scoreUpdater.getAndIncrement(tom);\n        }\n    }\n\n    public static class Candidate {\n\n        volatile int score;\n    }\n\n    public static void main(String[] args) throws InterruptedException {\n        tom=new Candidate();\n        peter=new Candidate();\n        AtomicIntegerFieldUpdaterDemo r = new AtomicIntegerFieldUpdaterDemo();\n        Thread t1 = new Thread(r);\n        Thread t2 = new Thread(r);\n        t1.start();\n        t2.start();\n        t1.join();\n        t2.join();\n        System.out.println(&quot;\u666e\u901a\u53d8\u91cf\uff1a&quot;+peter.score);\n        System.out.println(&quot;\u5347\u7ea7\u540e\u7684\u7ed3\u679c&quot;+ tom.score);\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-025857-Hd.png\" alt=\"20260114-025857-Hd.png\" \/><\/p>\n<p>AtomicintegerFieldUpdater\u6ce8\u610f\u70b9\uff1a<br \/>\n\u53ef\u89c1\u8303\u56f4\uff0c\u9700\u8981public\uff08\u7c7b\u4f3c\u4e8e\u53cd\u5c04\uff09<br \/>\n\u4e0d\u652f\u6301static<\/p>\n<h3 id=\"h3-6\">Adder\u7d2f\u52a0\u5668<\/h3>\n<ol>\n<li>\u662fJava 8\u5f15\u5165\u7684\uff0c\u76f8\u5bf9\u662f\u6bd4\u8f83\u65b0\u7684\u4e00\u4e2a\u7c7b<\/li>\n<li>\u9ad8\u5e76\u53d1\u4e0bLongAdder\u6bd4AtomicLong\u6548\u7387\u9ad8\uff0c\u4e0d\u8fc7\u672c\u8d28\u662f\u7a7a\u95f4\u6362\u65f6\u95f4<\/li>\n<li>\u7ade\u4e89\u6fc0\u70c8\u7684\u65f6\u5019\uff0cLongAdder\u628a\u4e0d\u540c\u7ebf\u7a0b\u5bf9\u5e94\u5230\u4e0d\u540c\u7684Cell\u4e0a\u8fdb\u884c\u4fee\u6539\uff0c\u964d\u4f4e\u4e86\u51b2\u7a81\u7684\u6982\u7387\uff0c\u662f\u591a\u6bb5\u9501\u7684\u7406\u5ff5\uff0c\u63d0\u9ad8\u4e86\u5e76\u53d1\u6027<\/li>\n<li>\u7531\u4e8e\u7ade\u4e89\u5f88\u6fc0\u70c8\uff0c\u6bcf\u4e00\u6b21\u52a0\u6cd5\uff0c\u90fd\u8981\u884clefresh\uff0c\u5bfc\u81f4\u5f88\u8017\u8d39\u8d44\u6e90\u3002<\/li>\n<\/ol>\n<p>LongAdder\u6bd4AtomicLong\u81ea\u52a0\u6548\u7387\u5bf9\u6bd4\uff1a<br \/>\n\u591a\u7ebf\u7a0b\u4e0b\uff0c\u63d0\u4ea4\u4e00\u4e07\u6b21\u4efb\u52a1\uff0c\u6bcf\u6b21\u4efb\u52a1\u7d2f\u52a010000\u6b21\u3002<\/p>\n<ol>\n<li>\u4f7f\u7528AtomicLong<\/li>\n<\/ol>\n<pre>package atomic;\n\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.atomic.AtomicLong;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u9ad8\u5e76\u53d1\u573a\u666f\u4e0b\uff0cLongAdder\u6bd4AtomicLong\u6027\u80fd\u597d\n *\/\npublic class AtomicLongDemo {\n\n    public static void main(String[] args) throws InterruptedException {\n        AtomicLong counter = new AtomicLong(0);\n        System.out.println(&quot;\u521d\u59cb\u503c\uff1a&quot; + counter.get());\n        ExecutorService service = Executors.newFixedThreadPool(20);\n        long start = System.currentTimeMillis();\n        for (int i = 0; i &lt; 10000; i++) {\n            service.submit(new Task(counter));\n        }\n        service.shutdown();\n        while (!service.isTerminated()) {\n\n        }\n        long end = System.currentTimeMillis();\n        System.out.println(&quot;\u7d2f\u52a0\u540e\u503c\uff1a&quot; + counter.get());\n        System.out.println(&quot;AtomicLong\u8017\u65f6\uff1a&quot; + (end - start));\n    }\n\n    private static class Task implements Runnable {\n\n        private AtomicLong counter;\n\n        public Task(AtomicLong counter) {\n            this.counter = counter;\n        }\n\n        @Override\n        public void run() {\n            for (int i = 0; i &lt; 10000; i++) {\n                counter.incrementAndGet();\n            }\n        }\n    }\n}<\/pre>\n<ol start=\"2\">\n<li>\u4f7f\u7528AtomicLong<\/li>\n<\/ol>\n<pre>package atomic;\n\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.atomic.AtomicLong;\nimport java.util.concurrent.atomic.LongAdder;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u9ad8\u5e76\u53d1\u573a\u666f\u4e0b\uff0cLongAdder\u6bd4AtomicLong\u6027\u80fd\u597d\n *\/\npublic class LongAdderDemo {\n\n    public static void main(String[] args) throws InterruptedException {\n        LongAdder counter = new LongAdder();\n        System.out.println(&quot;\u521d\u59cb\u503c\uff1a&quot; + counter.sum());\n        ExecutorService service = Executors.newFixedThreadPool(20);\n        long start = System.currentTimeMillis();\n        for (int i = 0; i &lt; 10000; i++) {\n            service.submit(new Task(counter));\n        }\n        service.shutdown();\n        while (!service.isTerminated()) {\n\n        }\n        long end = System.currentTimeMillis();\n        System.out.println(&quot;\u7d2f\u52a0\u540e\u503c\uff1a&quot; + counter.sum());\n        System.out.println(&quot;LongAdder\u8017\u65f6\uff1a&quot; + (end - start));\n    }\n\n    private static class Task implements Runnable {\n\n        private LongAdder counter;\n\n        public Task(LongAdder counter) {\n            this.counter = counter;\n        }\n\n        @Override\n        public void run() {\n            for (int i = 0; i &lt; 10000; i++) {\n                counter.increment();\n            }\n        }\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n\u4e0d\u4f7f\u7528\u7d2f\u52a0\u5668\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-032102-kt.png\" alt=\"20260114-032102-kt.png\" \/><\/p>\n<p>\u4f7f\u7528\u7d2f\u52a0\u5668\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-032135-A0.png\" alt=\"20260114-032135-A0.png\" \/><\/p>\n<p>\u6548\u7387\u8d8a\u63d0\u534710\u500d\u4e0d\u6b62<\/p>\n<p>LongAdder\u5e26\u6765\u7684\u6539\u8fdb\u548c\u539f\u7406<br \/>\n\u5728\u5185\u90e8\uff0c\u8fd9\u4e2aLongAdder\u7684\u5b9e\u73b0\u539f\u7406\u548c\u521a\u624d\u7684AtomicLong\u662f\u6709\u4e0d\u540c\u7684\uff0c\u521a\u624d\u7684AtomicLong\u7684\u5b9e\u73b0\u539f\u7406\u662f\uff0c\u6bcf\u4e00\u6b21\u52a0\u6cd5\u90fd\u9700\u8981\u505a\u540c\u6b65\uff0c\u6240\u4ee5\u5728\u9ad8\u5e76\u53d1\u7684\u65f6\u5019\u4f1a\u5bfc\u81f4\u51b2\u7a81\u6bd4\u8f83\u591a\uff0c\u4e5f\u5c31\u964d\u4f4e\u4e86\u6548\u7387<\/p>\n<p>\u800c\u6b64\u65f6\u7684LongAdder\uff0c\u6bcf\u4e2a\u7ebf\u7a0b\u4f1a\u6709\u81ea\u5df1\u7684\u4e00\u4e2a\u8ba1\u6570\u5668\uff0c\u4ec5\u7528\u6765\u5728\u81ea\u5df1\u7ebf\u7a0b\u5185\u8ba1\u6570\uff0c\u8fd9\u6837\u4e00\u6765\u5c31\u4e0d\u4f1a\u548c\u5176\u4ed6\u7ebf\u7a0b\u7684\u8ba1\u6570\u5668\u5e72\u6270<\/p>\n<p>\u5982\u56fe\u4e2d\u6240\u793a\uff0c\u7b2c\u4e00\u4e2a\u7ebf\u7a0b\u7684\u8ba1\u6570\u5668\u6570\u503c\uff0c\u4e5f\u5c31\u662fctr\u2019<br \/>\n\u4e3a1\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u7ebf\u7a0b2\u7684\u8ba1\u6570\u5668ctr\u2019\u2019\u7684\u6570\u503c\u5df2\u7ecf\u662f3\u4e86\uff0c\u4ed6\u4eec\u4e4b\u95f4\u5e76\u4e0d\u5b58\u5728\u7ade\u4e89\u5173\u7cfb,\u6240\u4ee5\u5728\u52a0\u548c\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6839\u672c\u4e0d\u9700\u8981\u540c\u6b65\u673a\u5236\uff0c\u4e5f\u4e0d\u9700\u8981\u521a\u624d\u7684flush\u548crefresh\u3002\u8fd9\u91cc\u4e5f\u6ca1\u6709\u4e00\u4e2a\u516c\u5171\u7684counter\u6765\u7ed9\u6240\u6709\u7ebf\u7a0b\u7edf\u4e00\u8ba1\u6570<\/p>\n<p>AtomicLong\u7d2f\u52a0\u8fc7\u7a0b\u793a\u4f8b\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-032732-2F.png\" alt=\"20260114-032732-2F.png\" \/><\/p>\n<p>LongAdder\u7d2f\u52a0\u8fc7\u7a0b\u793a\u4f8b\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-032834-2M.png\" alt=\"20260114-032834-2M.png\" \/><\/p>\n<p>LongAdder\u539f\u7406<br \/>\nLongAdder\u5f15\u5165\u4e86\u5206\u6bb5\u7d2f\u52a0\u7684\u6982\u5ff5\uff0c\u5185\u90e8\u6709\u4e00\u4e2abase\u53d8\u91cf\u548c\u4e00\u4e2aCell[]\u6570\u7ec4\u5171\u540c\u53c2\u4e0e\u8ba1\u6570\uff1a<br \/>\nbase\u53d8\u91cf\uff1a\u7ade\u4e89\u4e0d\u6fc0\u70c8\uff0c\u76f4\u63a5\u7d2f\u52a0\u5230\u8be5\u53d8\u91cf\u4e0a<br \/>\nCell[]\u6570\u7ec4\uff1a\u7ade\u4e89\u6fc0\u70c8\uff0c\u5404\u4e2a\u7ebf\u7a0b\u5206\u6563\u7d2f\u52a0\u5230\u81ea\u5df1\u7684\u69fdCell[i]\u4e2d<\/p>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u56db)\u2014\u2014atomic\u539f\u5b50\u7c7b\u5305-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260114-033337-qf.png\" alt=\"20260114-033337-qf.png\" \/><\/p>\n<h3 id=\"h3-7\">Accumulator\u7d2f\u52a0\u5668<\/h3>\n<p>Accumulator\u548cAdder\u975e\u5e38\u76f8\u4f3c\uff0cAccumulator\u5c31\u662f\u4e00\u4e2a\u66f4\u901a\u7528\u7248\u672c\u7684Adder<\/p>\n<p>\u6f14\u793aLongAccumulator\u7684\u7528\u6cd5<\/p>\n<pre>package atomic;\n\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.atomic.LongAccumulator;\nimport java.util.stream.IntStream;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793aLongAccumulator\u7684\u7528\u6cd5\n *\/\npublic class LongAccumulatorDemo {\n\n    public static void main(String[] args) {\n        LongAccumulator accumulator = new LongAccumulator((x, y) -&gt; x * y, 1);\n        ExecutorService executor = Executors.newFixedThreadPool(8);\n        IntStream.range(1, 10).forEach(i -&gt; executor.submit(() -&gt; accumulator.accumulate(i)));\n\n        executor.shutdown();\n        while (!executor.isTerminated()) {\n\n        }\n        System.out.println(accumulator.getThenReset());\n    }\n}<\/pre>\n<p>\u5176\u4e2dx\u662f\u521d\u59cb\u503c\uff0cy\u662f\u4f20\u5165\u503caccumulator.accumulate(i))\uff0c\u5728\u8fd0\u884c\u4e2d\uff0c\u201c\u7d2f\u52a0\u201d\u662f\u5e76\u884c\u64cd\u4f5c\u7684\uff0c\u591a\u7ebf\u7a0b\u5e76\u884c\u64cd\u4f5c\uff0c\u53ef\u4ee5\u63d0\u9ad8\u6548\u7387\uff0c\u4f46\u662f\u6267\u884c\u987a\u5e8f\u4e0d\u80fd\u4fdd\u8bc1\uff0c\u9700\u8981\u8ba1\u7b97\u7684\u903b\u8f91\u662f\u53ef\u4ee5\u5e76\u884c\u7684\uff0c\u5426\u5219\u6700\u7ec8\u7ed3\u679c\u6709\u95ee\u9898\u3002<\/p>\n","excerpt":"<p>atomic\u539f\u5b50\u7c7b\u6982\u8ff0 \u4ec0\u4e48\u662f\u539f\u5b50\u7c7b\uff1f \u4e0d\u53ef\u5206\u5272\uff0c\u4e00\u4e2a\u64cd\u4f5c\u662f\u4e0d\u53ef\u4e2d\u65ad\u7684\u6570\u636e\u7c7b\u578b\uff0c\u5373\u4fbf\u662f\u591a\u7ebf\u7a0b\u7684\u60c5\u51b5\u4e0b\u4e5f\u53ef\u4ee5\u4fdd\u8bc1\uff0cjava\u4e2d\u662fjava.util.concurrent.atomic\u5305\u3002 \u539f\u5b50\u7c7b\u6709\u4ec0\u4e48\u4f5c\u7528\uff1f \u539f\u5b50\u7c7b\u7684\u4f5c\u7528\u548c\u9501\u7c7b\u4f3c\uff0c\u662f\u4e3a\u4e86\u4fdd\u8bc1\u5e76\u53d1\u60c5\u51b5\u4e0b\u7ebf\u7a0b\u5b89\u5168\u3002\u4e0d\u8fc7\u539f\u5b50\u7c7b\u76f8\u6bd4\u4e8e\u9501\uff0c &#8230;<\/p>\n","date":"2025-06-08 01:32:45","modified":"2026-03-05 17:05:03","categories":[{"id":80,"slug":"java","title":"java","description":"","parent":63,"post_count":45},{"id":231,"slug":"juc","title":"JUC","description":"","parent":80,"post_count":9},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":82,"slug":"java","title":"java","description":"","post_count":66},{"id":232,"slug":"juc","title":"JUC","description":"","post_count":9}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"bpu":["1|20260227"],"views":["210"]},"thumbnail_size":"thumbnail","thumbnail_images":[]},{"id":2889,"type":"post","slug":"juc%e5%b9%b6%e5%8f%91%e7%bc%96%e7%a8%8b-%e9%94%81","url":"https:\/\/qkongtao.cn\/?p=2889","status":"publish","title":"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501","title_plain":"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501","content":"<h2 id=\"h2-0\">\u5343\u53d8\u4e07\u5316\u7684\u9501<\/h2>\n<ol>\n<li>Lock\u63a5\u53e3<\/li>\n<li>\u9501\u7684\u5206\u7c7b<\/li>\n<li>\u4e50\u89c2\u9501\u548c\u60b2\u89c2\u9501<\/li>\n<li>\u53ef\u91cd\u5165\u9501\u548c\u975e\u53ef\u91cd\u5165\u9501\uff0c\u5df2ReentrantLock\u4e3a\u4f8b\uff08\u91cd\u70b9\uff09<\/li>\n<li>\u516c\u5e73\u9501\u548c\u975e\u516c\u5e73\u9501<\/li>\n<li>\u5171\u4eab\u9501\u548c\u6392\u5b83\u9501\uff1a\u4ee5ReentrantReadWriteLock\u8bfb\u5199\u9501\u4e3a\uff08\u91cd\u70b9\uff09<\/li>\n<li>\u81ea\u65cb\u9501\u548c\u963b\u585e\u9501<\/li>\n<li>\u53ef\u4e2d\u65ad\u9501\uff1a\u987e\u540d\u601d\u4e49\uff0c\u5c31\u662f\u53ef\u4ee5\u54cd\u5e94\u4e2d\u65ad\u7684\u9501<\/li>\n<li>\u9501\u4f18\u5316<\/li>\n<\/ol>\n<h2 id=\"h2-1\">Lock\u7b80\u4ecb\u3001\u5730\u4f4d\u3001\u4f5c\u7528<\/h2>\n<ul>\n<li>\u9501\u662f\u4e00\u79cd\u5de5\u5177\uff0c\u7528\u4e8e\u63a7\u5236\u5bf9\u5171\u4eab\u8d44\u6e90\u7684\u8bbf\u95ee\u3002<\/li>\n<li>Lock\u548csynchronized\uff0c\u8fd9\u4e24\u4e2a\u662f\u6700\u5e38\u89c1\u7684\u9501\uff0c\u5b83\u4eec\u90fd\u53ef\u4ee5\u8fbe\u5230\u7ebf<br \/>\n\u7a0b\u5b89\u5168\u7684\u76ee\u7684\uff0c\u4f46\u662f\u5728\u4f7f\u7528\u4e0a\u548c\u529f\u80fd\u4e0a\u53c8\u6709\u8f83\u5927\u7684\u4e0d\u540c\u3002<\/li>\n<li>Lock\u5e76\u4e0d\u662f\u7528\u6765\u4ee3\u66ffsynchronized\u7684\uff0c\u800c\u662f\u5f53\u4f7f\u7528<br \/>\nsynchronized\u4e0d\u5408\u9002\u6216\u4e0d\u8db3\u4ee5\u6ee1\u8db3\u8981\u6c42\u7684\u65f6\u5019\uff0c\u6765\u63d0\u4f9b\u9ad8\u7ea7\u529f\u80fd<br \/>\n\u7684\u3002<\/li>\n<li>Lock\u63a5\u53e3\u6700\u5e38\u89c1\u7684\u5b9e\u73b0\u7c7b\u662fReentrantLock<\/li>\n<li>\u901a\u5e38\u60c5\u51b5\u4e0b\uff0cLock\u53ea\u5141\u8bb8\u4e00\u4e2a\u7ebf\u7a0b\u6765\u8bbf\u95ee\u8fd9\u4e2a\u5171\u4eab\u8d44\u6e90\u3002\u4e0d\u8fc7<br \/>\n\u6709\u7684\u65f6\u5019\uff0c\u4e00\u4e9b\u7279\u6b8a\u7684\u5b9e\u73b0\u4e5f\u53ef\u5141\u8bb8\u5e76\u53d1\u8bbf\u95ee\uff0c\u6bd4\u5982<br \/>\nReadWriteLock\u91cc\u9762\u7684ReadLock\u3002<\/li>\n<\/ul>\n<h2 id=\"h2-2\">\u4e3a\u4ec0\u4e48\u9700\u8981Lock\uff1f<\/h2>\n<p>\u4e3a\u4ec0\u4e48synchronized\u4e0d\u591f\u7528\uff1f<\/p>\n<p>1) \u6548\u7387\u4f4e\uff1a\u9501\u7684\u91ca\u653e\u60c5\u51b5\u5c11\u3001\u8bd5\u56fe\u83b7\u5f97\u9501\u65f6\u4e0d\u80fd\u8bbe\u5b9a\u8d85\u65f6\u3001\u4e0d\u80fd<br \/>\n\u4e2d\u65ad\u4e00\u4e2a\u6b63\u5728\u8bd5\u56fe\u83b7\u5f97\u9501\u7684\u7ebf\u7a0b<br \/>\n2) \u4e0d\u591f\u7075\u6d3b\uff08\u8bfb\u5199\u9501\u66f4\u7075\u6d3b\uff09\uff1a\u52a0\u9501\u548c\u91ca\u653e\u7684\u65f6\u673a\u5355\u4e00\uff0c\u6bcf\u4e2a\u9501<br \/>\n\u4ec5\u6709\u5355\u4e00\u7684\u6761\u4ef6\uff08\u67d0\u4e2a\u5bf9\u8c61\uff09\uff0c\u53ef\u80fd\u662f\u4e0d\u591f\u7684<br \/>\n3) \u65e0\u6cd5\u77e5\u9053\u662f\u5426\u6210\u529f\u83b7\u53d6\u5230\u9501<\/p>\n<h2 id=\"h2-3\">Lock\u4e3b\u8981\u65b9\u6cd5\u4ecb\u7ecd<\/h2>\n<p>\u5728Lock\u4e2d\u58f0\u660e\u4e86\u56db\u4e2a\u65b9\u6cd5\u6765\u83b7\u53d6\u9501\uff1a<br \/>\nlock()\u3001 tryLock()\u3001 tryLock(long time, TimeUnit unit)\u548c<br \/>\nlockinterruptibly()<\/p>\n<ol>\n<li>lock()\u65b9\u6cd5<\/li>\n<\/ol>\n<ul>\n<li>lock()\u5c31\u662f\u6700\u666e\u901a\u7684\u83b7\u53d6\u9501\u3002\u5982\u679c\u9501\u5df2\u88ab\u5176\u4ed6\u7ebf\u7a0b\u83b7\u53d6\uff0c\u5219\u8fdb\u884c\u7b49\u5f85<\/li>\n<li>Lock\u4e0d\u4f1a\u50cfsynchronized\u4e00\u6837\u5728\u5f02\u5e38\u65f6\u81ea\u52a8\u91ca\u653e\u9501<\/li>\n<li>\u56e0\u6b64\u6700\u4f73\u5b9e\u8df5\u662f\uff0c\u5728finally\u4e2d\u91ca\u653e\u9501\uff0c\u4ee5\u4fdd\u8bc1\u53d1\u751f\u5f02\u5e38\u65f6\u9501\u4e00\u5b9a\u88ab\u91ca\u653e<\/li>\n<li>lock()\u65b9\u6cd5\u4e0d\u80fd\u88ab\u4e2d\u65ad\uff0c\u8fd9\u4f1a\u5e26\u6765\u5f88\u5927\u7684\u9690\u60a3\uff1a\u4e00\u65e6\u9677\u5165\u6b7b\u9501\uff0c<br \/>\nlock()\u5c31\u4f1a\u9677\u5165\u6c38\u4e45\u7b49\u5f85<\/li>\n<\/ul>\n<p>\u4f7f\u7528\u6848\u4f8b\uff1a<\/p>\n<pre>import java.util.concurrent.locks.Lock;\nimport java.util.concurrent.locks.ReentrantLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     Lock\u4e0d\u4f1a\u50cfsynchronized\u4e00\u6837\uff0c\u5f02\u5e38\u7684\u65f6\u5019\u81ea\u52a8\u91ca\u653e\u9501\uff0c\u6240\u4ee5\u6700\u4f73\u5b9e\u8df5\u662f\uff0cfinally\u4e2d\u91ca\u653e\u9501\uff0c\u4ee5\u4fbf\u4fdd\u8bc1\u53d1\u751f\u5f02\u5e38\u7684\u65f6\u5019\u9501\u4e00\u5b9a\u88ab\u91ca\u653e\n *\/\npublic class MustUnlock {\n\n    private static Lock lock = new ReentrantLock();\n\n    public static void main(String[] args) {\n        lock.lock();\n        try{\n            \/\/\u83b7\u53d6\u672c\u9501\u4fdd\u62a4\u7684\u8d44\u6e90\n            System.out.println(Thread.currentThread().getName()+&quot;\u5f00\u59cb\u6267\u884c\u4efb\u52a1&quot;);\n        }finally {\n            lock.unlock();\n        }\n    }\n}<\/pre>\n<ol start=\"2\">\n<li>tryLock() <\/li>\n<\/ol>\n<ul>\n<li>tryLock()\u7528\u6765\u5c1d\u8bd5\u83b7\u53d6\u9501\uff0c\u5982\u679c\u5f53\u524d\u9501\u6ca1\u6709\u88ab\u5176\u4ed6\u7ebf\u7a0b\u5360\u7528<br \/>\n\u5219\u83b7\u53d6\u6210\u529f\uff0c\u5219\u8fd4\u56detrue\uff0c\u5426\u5219\u8fd4\u56defalse\uff0c\u4ee3\u8868\u83b7\u53d6\u9501\u5931\u8d25<\/li>\n<li>\u76f8\u6bd4\u4e8elock\uff0c\u8fd9\u6837\u7684\u65b9\u6cd5\u663e\u7136\u529f\u80fd\u66f4\u5f3a\u5927\u4e86\uff0c\u6211\u4eec\u53ef\u4ee5\u6839\u636e<br \/>\n\u662f\u5426\u80fd\u83b7\u53d6\u5230\u9501\u6765\u51b3\u5b9a\u540e\u7eed\u7a0b\u5e8f\u7684\u884c\u4e3a<\/li>\n<li>\u8be5\u65b9\u6cd5\u4f1a\u7acb\u5373\u8fd4\u56de\uff0c\u5373\u4fbf\u5728\u62ff\u4e0d\u5230\u9501\u65f6\u4e0d\u4f1a\u4e00\u76f4\u5728\u90a3\u7b49<\/li>\n<\/ul>\n<p>tryLock() \u907f\u514d\u6b7b\u9501\u6848\u4f8b\uff1a<\/p>\n<pre>package lock.lock;\n\nimport java.util.Random;\nimport java.util.concurrent.ThreadPoolExecutor;\nimport java.util.concurrent.TimeUnit;\nimport java.util.concurrent.locks.Lock;\nimport java.util.concurrent.locks.ReentrantLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u7528tryLock\u6765\u907f\u514d\u6b7b\u9501\n *\/\npublic class TryLockDeadlock implements Runnable {\n\n    int flag = 1;\n    static Lock lock1 = new ReentrantLock();\n    static Lock lock2 = new ReentrantLock();\n\n    public static void main(String[] args) {\n        TryLockDeadlock r1 = new TryLockDeadlock();\n        TryLockDeadlock r2 = new TryLockDeadlock();\n        r1.flag = 1;\n        r1.flag = 0;\n        new Thread(r1).start();\n        new Thread(r2).start();\n\n    }\n\n    @Override\n    public void run() {\n        for (int i = 0; i &lt; 100; i++) {\n            if (flag == 1) {\n                try {\n                    if (lock1.tryLock(800, TimeUnit.MILLISECONDS)) {\n                        try {\n                            System.out.println(&quot;\u7ebf\u7a0b1\u83b7\u53d6\u5230\u4e86\u95011&quot;);\n                            Thread.sleep(new Random().nextInt(1000));\n                            if (lock2.tryLock(800, TimeUnit.MILLISECONDS)) {\n                                try {\n                                    System.out.println(&quot;\u7ebf\u7a0b1\u83b7\u53d6\u5230\u4e86\u95012&quot;);\n                                    System.out.println(&quot;\u7ebf\u7a0b1\u6210\u529f\u83b7\u53d6\u5230\u4e86\u4e24\u628a\u9501&quot;);\n                                    break;\n                                } finally {\n                                    lock2.unlock();\n                                }\n                            } else {\n                                System.out.println(&quot;\u7ebf\u7a0b1\u83b7\u53d6\u95012\u5931\u8d25\uff0c\u5df2\u91cd\u8bd5&quot;);\n                            }\n                        } finally {\n                            lock1.unlock();\n                            Thread.sleep(new Random().nextInt(1000));\n                        }\n                    } else {\n                        System.out.println(&quot;\u7ebf\u7a0b1\u83b7\u53d6\u95011\u5931\u8d25\uff0c\u5df2\u91cd\u8bd5&quot;);\n                    }\n                } catch (InterruptedException e) {\n                    e.printStackTrace();\n                }\n            }\n\n            if (flag == 0) {\n                try {\n                    if (lock2.tryLock(3000, TimeUnit.MILLISECONDS)) {\n                        try {\n                            System.out.println(&quot;\u7ebf\u7a0b2\u83b7\u53d6\u5230\u4e86\u95012&quot;);\n                            Thread.sleep(new Random().nextInt(1000));\n                            if (lock1.tryLock(800, TimeUnit.MILLISECONDS)) {\n                                try {\n                                    System.out.println(&quot;\u7ebf\u7a0b2\u83b7\u53d6\u5230\u4e86\u95011&quot;);\n                                    System.out.println(&quot;\u7ebf\u7a0b2\u6210\u529f\u83b7\u53d6\u5230\u4e86\u4e24\u628a\u9501&quot;);\n                                    break;\n                                } finally {\n                                    lock1.unlock();\n                                }\n                            } else {\n                                System.out.println(&quot;\u7ebf\u7a0b2\u83b7\u53d6\u95011\u5931\u8d25\uff0c\u5df2\u91cd\u8bd5&quot;);\n                            }\n                        } finally {\n                            lock2.unlock();\n                            Thread.sleep(new Random().nextInt(1000));\n                        }\n                    } else {\n                        System.out.println(&quot;\u7ebf\u7a0b2\u83b7\u53d6\u95012\u5931\u8d25\uff0c\u5df2\u91cd\u8bd5&quot;);\n                    }\n                } catch (InterruptedException e) {\n                    e.printStackTrace();\n                }\n            }\n        }\n    }\n}<\/pre>\n<ol start=\"3\">\n<li>tryLock(long time, TimeUnit unit)<\/li>\n<\/ol>\n<ul>\n<li>\u83b7\u53d6\u9501\uff0c\u8d85\u65f6\u5c31\u653e\u5f03<\/li>\n<li>lockInterruptibly()\uff1a\u76f8\u5f53\u4e8etryLock(long time, TimeUnit unit)\u628a\u8d85\u65f6\u65f6\u95f4\u8bbe\u7f6e\u4e3a\u65e0\u9650\u3002\u5728\u7b49\u5f85\u9501\u7684\u8fc7\u7a0b\u4e2d\uff0c\u7ebf\u7a0b\u53ef\u4ee5\u88ab\u4e2d\u65ad<\/li>\n<\/ul>\n<p>\u7ebf\u7a0b\u4e2d\u65ad\uff0c\u83b7\u53d6\u9501\u548c\u91ca\u653e\u9501\u6848\u4f8b\uff1a<\/p>\n<pre>package lock.lock;\n\nimport java.util.concurrent.ThreadPoolExecutor;\nimport java.util.concurrent.locks.Lock;\nimport java.util.concurrent.locks.ReentrantLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     TODO\n *\/\npublic class LockInterruptibly implements Runnable {\n\n    private Lock lock = new ReentrantLock();\npublic static void main(String[] args) {\n    LockInterruptibly lockInterruptibly = new LockInterruptibly();\n    Thread thread0 = new Thread(lockInterruptibly);\n    Thread thread1 = new Thread(lockInterruptibly);\n    thread0.start();\n    thread1.start();\n\n    try {\n        Thread.sleep(2000);\n    } catch (InterruptedException e) {\n        e.printStackTrace();\n    }\n    thread0.interrupt(); \/\/ \u4e2d\u65ad\u7ebf\u7a0b\u6267\u884c\n}\n    @Override\n    public void run() {\n        System.out.println(Thread.currentThread().getName() + &quot;\u5c1d\u8bd5\u83b7\u53d6\u9501&quot;);\n        try {\n            lock.lockInterruptibly();\n            try {\n                System.out.println(Thread.currentThread().getName() + &quot;\u83b7\u53d6\u5230\u4e86\u9501&quot;);\n                Thread.sleep(5000);\n            } catch (InterruptedException e) {\n                System.out.println(Thread.currentThread().getName() + &quot;\u7761\u7720\u671f\u95f4\u88ab\u4e2d\u65ad\u4e86&quot;);\n            } finally {\n                lock.unlock();\n                System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u4e86\u9501&quot;);\n            }\n        } catch (InterruptedException e) {\n            System.out.println(Thread.currentThread().getName() + &quot;\u83b7\u5f97\u9501\u671f\u95f4\u88ab\u4e2d\u65ad\u4e86&quot;);\n        }\n    }\n}<\/pre>\n<ol start=\"4\">\n<li>\u53ef\u89c1\u6027\u4fdd\u8bc1<\/li>\n<\/ol>\n<p>Lock\u7684\u52a0\u89e3\u9501\u548csynchronized\u6709\u540c\u6837\u7684\u5185\u5b58\u8bed\u4e49\uff0c\u4e5f\u5c31\u662f\u8bf4<br \/>\n\u4e0b\u4e00\u4e2a\u7ebf\u7a0b\u52a0\u9501\u540e\u53ef\u4ee5\u770b\u5230\u6240\u6709\u524d\u4e00\u4e2a\u7ebf\u7a0b\u89e3\u9501\u524d\u53d1\u751f\u7684\u6240\u6709<br \/>\n\u64cd\u4f5c<\/p>\n<p>synchronized\u53ef\u89c1\u6027\u793a\u4f8b\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/\u53ef\u89c1\u60271.png\" alt=\"\u53ef\u89c1\u60271.png\" \/><\/p>\n<p>Lock\u53ef\u89c1\u6027\u793a\u4f8b\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/\u53ef\u89c1\u60272.png\" alt=\"\u53ef\u89c1\u60272.png\" \/><\/p>\n<h2 id=\"h2-4\">\u9501\u7684\u5206\u7c7b<\/h2>\n<p>\u6ce8\u610f\uff1a\u9501\u7684\u5206\u7c7b\uff0c\u662f\u4ece\u5404\u79cd\u4e0d\u540c\u89d2\u5ea6\u51fa\u53d1\u53bb\u770b\u7684\uff0c\u8fd9\u4e9b\u5206\u7c7b\u5e76\u4e0d\u662f\u4e92\u65a5\u7684\u3002\u4e5f\u5c31\u662f\u591a\u4e2a\u7c7b\u578b\u53ef\u4ee5\u5e76\u5b58\uff1a\u6709\u53ef\u80fd\u4e00\u4e2a\u9501\uff0c\u540c\u65f6\u5c5e\u4e8e\u4e24\u79cd\u7c7b\u578b\u3002\u6bd4\u5982ReentrantLock\u65e2\u662f\u4e92\u65a5\u9501\uff0c\u53c8\u662f\u53ef\u91cd\u5165\u9501<\/p>\n<p><img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20250909-030623-OS.png\" alt=\"20250909-030623-OS.png\" \/><\/p>\n<h3 id=\"h3-5\">\u4e50\u89c2\u9501\u548c\u60b2\u89c2\u9501<\/h3>\n<p>\u4e50\u89c2\u9501\uff1a\u975e\u4e92\u65a5\u540c\u6b65\u9501<br \/>\n\u60b2\u89c2\u9501\uff1a\u4e92\u65a5\u540c\u6b65\u9501<\/p>\n<p>\u4e3a\u4ec0\u4e48\u4f1a\u8bde\u751f\u975e\u4e92\u65a5\u540c\u6b65\u9501\uff1f<br \/>\n\u4e92\u65a5\u540c\u6b65\u9501\u7684\u52a3\u52bf<\/p>\n<ol>\n<li>\u963b\u585e\u548c\u5524\u9192\u5e26\u6765\u7684\u6027\u80fd\u52a3\u52bf<\/li>\n<li>\u6c38\u4e45\u963b\u585e\uff1a\u5982\u679c\u6301\u6709\u9501\u7684\u7ebf\u7a0b\u88ab\u6c38\u4e45\u963b\u585e,\u6bd4\u5982\u9047\u5230\u4e86\u65e0<br \/>\n\u9650\u5faa\u73af\u3001\u6b7b\u9501\u7b49\u6d3b\u8dc3\u6027\u95ee\u9898\uff0c\u90a3\u4e48\u7b49\u5f85\u8be5\u7ebf\u7a0b\u91ca\u653e\u9501\u7684<br \/>\n\u90a3\u51e0\u4e2a\u60b2\u50ac\u7684\u7ebf\u7a0b\uff0c\u5c06\u6c38\u8fdc\u4e5f\u5f97\u4e0d\u5230\u6267\u884c<\/li>\n<li>\u4f18\u5148\u7ea7\u53cd\u8f6c<\/li>\n<\/ol>\n<p>\u4ec0\u4e48\u662f\u60b2\u89c2\u9501\uff1f<\/p>\n<ul>\n<li>\u5982\u679c\u6211\u4e0d\u9501\u4f4f\u8fd9\u4e2a\u8d44\u6e90\uff0c\u522b\u4eba\u5c31\u4f1a\u6765\u4e89\u62a2\uff0c\u5c31\u4f1a\u9020\u6210\u6570\u636e\u7ed3\u679c<br \/>\n\u9519\u8bef\uff0c\u6240\u4ee5\u6bcf\u6b21\u60b2\u89c2\u9501\u4e3a\u4e86\u786e\u4fdd\u7ed3\u679c\u7684\u6b63\u786e\u6027\uff0c\u4f1a\u5728\u6bcf\u6b21\u83b7\u53d6<br \/>\n\u5e76\u4fee\u6539\u6570\u636e\u65f6\uff0c\u628a\u6570\u636e\u9501\u4f4f\uff0c\u8ba9\u522b\u4eba\u65e0\u6cd5\u8bbf\u95ee\u8be5\u6570\u636e\uff0c\u8fd9\u6837\u5c31<br \/>\n\u53ef\u4ee5\u786e\u4fdd\u6570\u636e\u5185\u5bb9\u4e07\u65e0\u4e00\u5931<\/li>\n<li>Java\u4e2d\u60b2\u89c2\u9501\u7684\u5b9e\u73b0\u5c31\u662fsynchronized\u548cLock\u76f8\u5173\u7c7b<\/li>\n<\/ul>\n<p>\u4ec0\u4e48\u662f\u4e50\u89c2\u9501\uff1f<\/p>\n<ul>\n<li>\u8ba4\u4e3a\u81ea\u5df1\u5728\u5904\u7406\u64cd\u4f5c\u7684\u65f6\u5019\u4e0d\u4f1a\u6709\u5176\u4ed6\u7ebf\u7a0b\u6765\u5e72\u6270\uff0c\u6240\u4ee5\u5e76\u4e0d\u4f1a\u9501<br \/>\n\u4f4f\u88ab\u64cd\u4f5c\u5bf9\u8c61<\/li>\n<li>\u5728\u66f4\u65b0\u7684\u65f6\u5019\uff0c\u53bb\u5bf9\u6bd4\u5728\u6211\u4fee\u6539\u7684\u671f\u95f4\u6570\u636e\u6709\u6ca1\u6709\u88ab\u5176\u4ed6\u4eba\u6539\u53d8\u8fc7\uff1a<br \/>\n\u5982\u679c\u6ca1\u88ab\u6539\u53d8\u8fc7\uff0c\u5c31\u8bf4\u660e\u771f\u7684\u662f\u53ea\u6709\u6211\u81ea\u5df1\u5728\u64cd\u4f5c\uff0c\u90a3\u6211\u5c31\u6b63\u5e38\u53bb<br \/>\n\u4fee\u6539\u6570\u636e<\/li>\n<li>\u5982\u679c\u6570\u636e\u548c\u6211\u4e00\u5f00\u59cb\u62ff\u5230\u7684\u4e0d\u4e00\u6837\u4e86\uff0c\u8bf4\u660e\u5176\u4ed6\u4eba\u5728\u8fd9\u6bb5\u65f6\u95f4\u5185\u6539<br \/>\n\u8fc7\u6570\u636e\uff0c\u90a3\u6211\u5c31\u4e0d\u80fd\u7ee7\u7eed\u521a\u624d\u7684\u66f4\u65b0\u6570\u636e\u8fc7\u7a0b\u4e86\uff0c\u6211\u4f1a\u9009\u62e9\u653e\u5f03\u3001<br \/>\n\u62a5\u9519\u3001\u91cd\u8bd5\u7b49\u7b56\u7565<\/li>\n<li>\u4e50\u89c2\u9501\u7684\u5b9e\u73b0\u4e00\u822c\u90fd\u662f\u5229\u7528CAS\u7b97\u6cd5\u6765\u5b9e\u73b0\u7684<\/li>\n<li>\u4e50\u89c2\u9501\u7684\u5178\u578b\u4f8b\u5b50\u5c31\u662f\u539f\u5b50\u7c7b\uff0c\u5e76\u53d1\u5bb9\u5668\u7b49<\/li>\n<\/ul>\n<p>\u4f7f\u7528\u573a\u666f\uff1a<\/p>\n<pre>\u60b2\u89c2\u9501\uff1a\u9002\u5408\u5e76\u53d1\u5199\u5165\u591a\u7684\u60c5\u51b5\uff0c\u9002\u7528\u4e8e\u4e34\u754c\u533a\u6301\u9501\u65f6\u95f4\u6bd4\u8f83\u957f\u7684\u60c5\u51b5\uff0c\u60b2\u89c2\u9501\u53ef\u4ee5\u907f\u514d\u5927\u91cf\u7684\u65e0\u7528\u81ea\u65cb\u7b49\u6d88\u8017\uff0c\u5178\u578b\u60c5\u51b5\uff1a\n1 \u4e34\u754c\u533a\u6709IO\u64cd\u4f5c\n2 \u4e34\u754c\u533a\u4ee3\u7801\u590d\u6742\u6216\u8005\u5faa\u73af\u91cf\u5927\n3 \u4e34\u754c\u533a\u7ade\u4e89\u975e\u5e38\u6fc0\u70c8\n\u4e50\u89c2\u9501\uff1a\u9002\u5408\u5e76\u53d1\u5199\u5165\u5c11\uff0c\u5927\u90e8\u5206\u662f\u8bfb\u53d6\u7684\u573a\u666f\uff0c\u4e0d\u52a0\u9501\u7684\u80fd\u8ba9\u8bfb\u53d6\u6027\u80fd\u5927\u5e45\u63d0\u9ad8\u3002<\/pre>\n<p>\u5f00\u9500\u5bf9\u6bd4\uff1a<\/p>\n<ul>\n<li>\u60b2\u89c2\u9501\u7684\u539f\u59cb\u5f00\u9500\u8981\u9ad8\u4e8e\u4e50\u89c2\u9501\uff0c\u4f46\u662f\u7279\u70b9\u662f\u4e00\u52b3\u6c38\u9038\uff0c\u4e34<br \/>\n\u754c\u533a\u6301\u9501\u65f6\u95f4\u5c31\u7b97\u8d8a\u6765\u8d8a\u5dee\uff0c\u4e5f\u4e0d\u4f1a\u5bf9\u4e92\u65a5\u9501\u7684\u5f00\u9500\u9020\u6210\u5f71<br \/>\n\u54cd<\/li>\n<li>\u76f8\u53cd\uff0c\u867d\u7136\u4e50\u89c2\u9501\u4e00\u5f00\u59cb\u7684\u5f00\u9500\u6bd4\u60b2\u89c2\u9501\u5c0f\uff0c\u4f46\u662f\u5982\u679c\u81ea\u65cb<br \/>\n\u65f6\u95f4\u5f88\u957f\u6216\u8005\u4e0d\u505c\u91cd\u8bd5\uff0c\u90a3\u4e48\u6d88\u8017\u7684\u8d44\u6e90\u4e5f\u4f1a\u8d8a\u6765\u8d8a\u591a\u3002<\/li>\n<\/ul>\n<p>\u5178\u578b\u4f8b\u5b50:<br \/>\n\u4e50\u89c2\u9501\uff1a<br \/>\n\u539f\u5b50\u7c7b\uff0c\u5e76\u53d1\u5bb9\u5668\u7b49\uff1b<br \/>\nGit\uff1aGit\u5c31\u662f\u4e50\u89c2\u9501\u7684\u5178\u578b\u4f8b\u5b50\uff0c\u5f53\u6211\u4eec\u5f80\u8fdc\u7aef\u4ed3\u5e93push\u7684\u65f6\u5019\uff0cgit\u4f1a\u68c0\u67e5\u8fdc\u7aef\u4ed3\u5e93\u7684\u7248\u672c\u662f\u4e0d\u662f\u9886\u5148\u4e8e\u6211\u4eec\u73b0\u5728\u7684\u7248\u672c\uff0c\u5982\u679c\u8fdc\u7a0b\u4ed3\u5e93\u7684\u7248\u672c\u53f7\u548c\u672c\u5730\u7684\u4e0d\u4e00\u6837\uff0c\u5c31\u8868\u793a\u6709\u5176\u4ed6\u4eba\u4fee\u6539\u4e86\u8fdc\u7aef\u4ee3\u7801\u4e86\uff0c\u6211\u4eec\u7684\u8fd9\u6b21\u63d0\u4ea4\u5c31\u5931\u8d25\uff1b\u5982\u679c\u8fdc\u7aef\u548c\u672c\u5730\u7248\u672c\u53f7\u4e00\u81f4\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u987a\u5229\u63d0\u4ea4\u7248\u672c\u5230\u8fdc\u7aef\u4ed3\u5e93<\/p>\n<p>\u60b2\u89c2\u9501\uff1asynchronized\u548cLock\u76f8\u5173\u7c7b<\/p>\n<h3 id=\"h3-6\">\u53ef\u91cd\u5165\u9501\u548c\u975e\u53ef\u91cd\u5165\u9501\uff0cReentrantLock<\/h3>\n<p>\u4ec0\u4e48\u662f\u53ef\u91cd\u5165\u548c\u975e\u53ef\u91cd\u5165\uff1f<br \/>\n\u53ef\u91cd\u5165\uff1a\u4e00\u628a\u9501\u53ef\u4ee5\u591a\u6b21\u88ab\u62ff\u5230<br \/>\n\u975e\u53ef\u91cd\u5165\uff1a\u4e00\u628a\u9501\u4e0d\u80fd\u540c\u65f6\u88ab\u4e24\u4e2a\u7ebf\u7a0b\u62ff\u5230\uff0c\u5fc5\u987b\u7b49\u7b2c\u4e00\u4e2a\u62ff\u5230\u9501\u7684\u7ebf\u7a0b\u91ca\u653e\u9501\u4e86\u624d\u80fd\u88ab\u7b2c\u4e8c\u4e2a\u7ebf\u7a0b\u62ff\u5230\u3002<\/p>\n<ol>\n<li>\u6848\u4f8b\u4e00\uff1a\u9884\u5b9a\u7535\u5f71\u7968\u5ea7\u4f4d<\/li>\n<\/ol>\n<p>\u76ee\u6807\u6548\u679c\uff1a\u4e24\u4e2a\u7ebf\u7a0b\u65e0\u6cd5\u540c\u65f6\u9884\u5b9a\u5ea7\u4f4d<\/p>\n<pre>&lt;code class=&quot;language-Java&quot;&gt;package lock.reentrantlock;\n\nimport java.util.concurrent.locks.ReentrantLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u591a\u7ebf\u7a0b\u9884\u5b9a\u7535\u5f71\u9662\u5ea7\u4f4d\n *\/\npublic class CinemaBookSeat {\n\n    private static ReentrantLock lock = new ReentrantLock();\n\n    private static void bookSeat() {\n        lock.lock();\n        try {\n            System.out.println(Thread.currentThread().getName() + &quot;\u5f00\u59cb\u9884\u5b9a\u5ea7\u4f4d&quot;);\n            Thread.sleep(1000);\n            System.out.println(Thread.currentThread().getName() + &quot;\u5b8c\u6210\u9884\u5b9a\u5ea7\u4f4d&quot;);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } finally {\n            lock.unlock();\n        }\n    }\n\n    public static void main(String[] args) {\n        new Thread(() -&gt; bookSeat()).start();\n        new Thread(() -&gt; bookSeat()).start();\n        new Thread(() -&gt; bookSeat()).start();\n        new Thread(() -&gt; bookSeat()).start();\n    }\n}<\/pre>\n<p>ReentrantLock\u7684\u65b9\u6cd5\u4ecb\u7ecd<\/p>\n<ol>\n<li>getHoldCount()\u9501\u5df2\u7ecf\u88ab\u91cd\u5165\u7684\u6570\u91cf<\/li>\n<li>isHeldByCurrentThread()\u53ef\u4ee5\u770b\u51fa\u9501\u662f\u5426\u88ab\u5f53\u524d\u7ebf\u7a0b\u6301\u6709<\/li>\n<li>getQueueLength()\u53ef\u4ee5\u8fd4\u56de\u5f53\u524d\u6b63\u5728\u7b49\u5f85\u8fd9\u628a\u9501\u7684\u961f\u5217\u6709\u591a\u957f\uff0c\u4e00\u822c\u8fd9\u4e24\u4e2a\u65b9\u6cd5\u662f\u5f00\u53d1\u548c\u8c03\u8bd5\u65f6\u5019\u4f7f\u7528\uff0c\u4e0a\u7ebf\u540e\u7528\u5230\u7684\u4e0d\u591a<\/li>\n<\/ol>\n<p>\u53ef\u91cd\u5165\u9501\u548c\u4e0d\u53ef\u91cd\u5165\u9501\u6e90\u7801\u5bf9\u6bd4\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/\u53ef\u91cd\u5165\u9501\u548c\u4e0d\u53ef\u91cd\u5165\u9501\u6e90\u7801\u5bf9\u6bd4.png\" alt=\"\u53ef\u91cd\u5165\u9501\u548c\u4e0d\u53ef\u91cd\u5165\u9501\u6e90\u7801\u5bf9\u6bd4.png\" \/><\/p>\n<h3 id=\"h3-7\">\u516c\u5e73\u9501\u548c\u975e\u516c\u5e73\u9501<\/h3>\n<ul>\n<li>\u516c\u5e73\u6307\u7684\u662f\u6309\u7167\u7ebf\u7a0b\u8bf7\u6c42\u7684\u987a\u5e8f\uff0c\u6765\u5206\u914d\u9501\uff1b\u975e\u516c\u5e73\u6307\u7684\u662f\uff0c<br \/>\n\u4e0d\u5b8c\u5168\u6309\u7167\u8bf7\u6c42\u7684\u987a\u5e8f\uff0c\u5728\u4e00\u5b9a\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u63d2\u961f\u3002<\/li>\n<li>\u6ce8\u610f\uff1a\u975e\u516c\u5e73\u4e5f\u540c\u6837\u4e0d\u63d0\u5021\u201c\u63d2\u961f\u301e\u884c\u4e3a\uff0c\u8fd9\u91cc\u7684\u975e\u516c\u5e73\uff0c\u6307<br \/>\n\u7684\u662f&quot;\u5728\u5408\u9002\u7684\u65f6\u673a\u301e\u63d2\u961f\uff0c\u800c\u4e0d\u662f\u76f2\u76ee\u63d2\u961f\u3002<\/li>\n<\/ul>\n<p>\u4ec0\u4e48\u662f\u5408\u9002\u7684\u65f6\u673a\u5462\uff1f<br \/>\n\u540c\u4e00\u4e2a\u7ebf\u7a0b\u91cd\u5165\u7684\u65f6\u5019\uff01\uff01\uff01<br \/>\n\u662f\u4e3a\u4e86\u63d0\u9ad8\u6548\u7387\uff0c\u907f\u514d\u5524\u9192\u5e26\u6765\u7684\u7a7a\u6863\u671f<\/p>\n<p>\u4f18\u7f3a\u70b9\u5bf9\u6bd4\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20250911-041839-Wl.png\" alt=\"20250911-041839-Wl.png\" \/><\/p>\n<p>\u4ee3\u7801\u6848\u4f8b\uff1a<br \/>\n\u83b7\u53d6\u516c\u5e73\u9501\uff1a<br \/>\nLock queueLock = new ReentrantLock(true);<br \/>\n\u83b7\u53d6\u4e0d\u516c\u5e73\u9501\uff1a<br \/>\nLock queueLock = new ReentrantLock(false);<\/p>\n<p>new ReentrantLock()\u9ed8\u8ba4\u662f\u975e\u516c\u5e73\u9501<\/p>\n<p>\u6f14\u793a\u516c\u5e73\u548c\u4e0d\u516c\u5e73\u4e24\u79cd\u60c5\u51b5<\/p>\n<pre>package lock.reentrantlock;\n\nimport java.util.Random;\nimport java.util.concurrent.locks.Lock;\nimport java.util.concurrent.locks.ReentrantLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u516c\u5e73\u548c\u4e0d\u516c\u5e73\u4e24\u79cd\u60c5\u51b5\n *\/\npublic class FairLock {\n\n    public static void main(String[] args) {\n        PrintQueue printQueue = new PrintQueue();\n        Thread thread[] = new Thread[10];\n        for (int i = 0; i &lt; 10; i++) {\n            thread[i] = new Thread(new Job(printQueue));\n        }\n        for (int i = 0; i &lt; 10; i++) {\n            thread[i].start();\n            try {\n                Thread.sleep(100);\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n}\n\nclass Job implements Runnable {\n\n    PrintQueue printQueue;\n\n    public Job(PrintQueue printQueue) {\n        this.printQueue = printQueue;\n    }\n\n    @Override\n    public void run() {\n        System.out.println(Thread.currentThread().getName() + &quot;\u5f00\u59cb\u6253\u5370&quot;);\n        printQueue.printJob(new Object());\n        System.out.println(Thread.currentThread().getName() + &quot;\u6253\u5370\u5b8c\u6bd5&quot;);\n    }\n}\n\nclass PrintQueue {\n\n    private Lock queueLock = new ReentrantLock(true);\n\n    public void printJob(Object document) {\n        queueLock.lock();\n        try {\n            int duration = new Random().nextInt(10) + 1;\n            System.out.println(Thread.currentThread().getName() + &quot;\u6b63\u5728\u6253\u5370\uff0c\u9700\u8981&quot; + duration);\n            Thread.sleep(duration * 1000);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } finally {\n            queueLock.unlock();\n        }\n\n        queueLock.lock();\n        try {\n            int duration = new Random().nextInt(10) + 1;\n            System.out.println(Thread.currentThread().getName() + &quot;\u6b63\u5728\u6253\u5370\uff0c\u9700\u8981&quot; + duration+&quot;\u79d2&quot;);\n            Thread.sleep(duration * 1000);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } finally {\n            queueLock.unlock();\n        }\n    }\n}<\/pre>\n<p>\u6267\u884c\u7ed3\u679c\uff1a<br \/>\n\u516c\u5e73\u9501\u7684\u65f6\u5019\uff1a\u6240\u6709\u7ebf\u7a0b\u987a\u5e8f\u62ff\u5230\u9501\uff0c\u987a\u5e8f\u6267\u884c\u3002<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20250911-043250-oK.png\" alt=\"20250911-043250-oK.png\" \/><\/p>\n<p>\u975e\u516c\u5e73\u9501\u7684\u65f6\u5019\uff1a\u7b2c\u4e8c\u6b21\u6253\u5370\u7684\u65f6\u5019\uff0c\u5e76\u6ca1\u6709\u91ca\u653e\u9501\uff0c\u4e24\u6b21\u6253\u5370\u4e00\u8d77\u6267\u884c\u4e86\uff0c\u4e0d\u9700\u8981\u91cd\u65b0\u83b7\u53d6\u9501<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20250911-043421-Ns.png\" alt=\"20250911-043421-Ns.png\" \/><\/p>\n<p>\u7279\u4f8b<\/p>\n<ul>\n<li>\u9488\u5bf9tryLock()\u65b9\u6cd5\uff0c\u5b83\u662f\u5f88\u731b\u7684\uff0c\u5b83\u4e0d\u9075\u5b88\u8bbe\u5b9a\u7684\u516c\u5e73\u7684\u89c4\u5219<\/li>\n<li>\u4f8b\u5982\uff0c\u5f53\u6709\u7ebf\u7a0b\u6267\u884ctryLock()\u7684\u65f6\u5019\uff0c\u4e00\u65e6\u6709\u7ebf\u7a0b\u91ca\u653e\u4e86\u9501\uff0c\u90a3<br \/>\n\u4e48\u8fd9\u4e2a\u6b63\u5728tryLock\u7684\u7ebf\u7a0b\u5c31\u80fd\u83b7\u53d6\u5230\u9501\uff0c\u5373\u4f7f\u5728\u5b83\u4e4b\u524d\u5df2\u7ecf\u6709\u5176<br \/>\n\u4ed6\u73b0\u5728\u5728\u7b49\u5f85\u961f\u5217\u91cc\u4e86<\/li>\n<\/ul>\n<h3 id=\"h3-8\">\u5171\u4eab\u9501\u548c\u6392\u5b83\u9501<\/h3>\n<ul>\n<li>\u6392\u4ed6\u9501\uff0c\u53c8\u79f0\u4e3a\u72ec\u5360\u9501\u3001\u72ec\u4eab\u9501<\/li>\n<li>\u5171\u4eab\u9501\uff0c\u53c8\u79f0\u4e3a\u8bfb\u9501\uff0c\u83b7\u5f97\u5171\u4eab\u9501\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u4f46\u65e0\u6cd5\u4fee\u6539\u548c\u5220<br \/>\n\u9664\u6570\u636e\uff0c\u5176\u4ed6\u7ebf\u7a0b\u6b64\u65f6\u4e5f\u53ef\u4ee5\u83b7\u53d6\u5230\u5171\u4eab\u9501\uff0c\u4e5f\u53ef\u4ee5\u67e5\u770b\u4f46\u65e0\u6cd5\u4fee<br \/>\n\u6539\u548c\u5220\u9664\u6570\u636e<\/li>\n<li>\u5171\u4eab\u9501\u548c\u6392\u5b83\u9501\u7684\u5178\u578b\u662f\u8bfb\u5199\u9501ReentrantReadWriteLock\uff0c\u5176\u4e2d<br \/>\n\u8bfb\u9501\u662f\u5171\u4eab\u9501\uff0c\u5199\u9501\u662f\u72ec\u4eab\u9501<\/li>\n<\/ul>\n<p><strong>\u8bfb\u5199\u9501\u7684\u4f5c\u7528<\/strong><\/p>\n<ul>\n<li>\u5728\u6ca1\u6709\u8bfb\u5199\u9501\u4e4b\u524d\uff0c\u6211\u4eec\u5047\u8bbe\u4f7f\u7528ReentrantLock\uff0c\u90a3\u4e48\u867d\u7136\u6211<br \/>\n\u4eec\u4fdd\u8bc1\u4e86\u7ebf\u7a0b\u5b89\u5168\uff0c\u4f46\u662f\u4e5f\u6d6a\u8d39\u4e86\u4e00\u5b9a\u7684\u8d44\u6e90\uff1a\u591a\u4e2a\u8bfb\u64cd\u4f5c\u540c\u65f6<br \/>\n\u8fdb\u884c\uff0c\u5e76\u6ca1\u6709\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898<\/li>\n<li>\u5728\u8bfb\u7684\u5730\u65b9\u4f7f\u7528\u8bfb\u9501\uff0c\u5728\u5199\u7684\u5730\u65b9\u4f7f\u7528\u5199\u9501\uff0c\u7075\u6d3b\u63a7\u5236\uff0c\u5982\u679c\u6ca1<br \/>\n\u6709\u5199\u9501\u7684\u60c5\u51b5\u4e0b\uff0c\u8bfb\u662f\u65e0\u963b\u585e\u7684,\u63d0\u9ad8\u4e86\u7a0b\u5e8f\u7684\u6267\u884c\u6548\u7387<\/li>\n<\/ul>\n<p><strong>\u8bfb\u5199\u9501\u7684\u89c4\u5219<\/strong><\/p>\n<p>a) \u591a\u4e2a\u7ebf\u7a0b\u53ea\u7533\u8bf7\u8bfb\u9501\uff0c\u90fd\u53ef\u4ee5\u7533\u8bf7\u5230<\/p>\n<p>b) \u5982\u679c\u6709\u4e00\u4e2a\u7ebf\u7a0b\u5df2\u7ecf\u5360\u7528\u4e86\u8bfb\u9501\uff0c\u5219\u6b64\u65f6\u5176\u4ed6\u7ebf\u7a0b\u5982\u679c\u8981\u7533\u8bf7\u5199<br \/>\n\u9501\uff0c\u5219\u7533\u8bf7\u5199\u9501\u7684\u7ebf\u7a0b\u4f1a\u4e00\u76f4\u7b49\u5f85\u91ca\u653e\u8bfb\u9501\u3002<\/p>\n<p>c) \u5982\u679c\u6709\u4e00\u4e2a\u7ebf\u7a0b\u5df2\u7ecf\u5360\u7528\u4e86\u5199\u9501\uff0c\u5219\u6b64\u65f6\u5176\u4ed6\u7ebf\u7a0b\u5982\u679c\u7533\u8bf7\u5199\u9501\u6216\u8005\u8bfb\u9501\uff0c\u5219\u7533\u8bf7\u7684\u7ebf\u7a0b\u4f1a\u4e00\u76f4\u7b49\u5f85\u91ca\u653e\u5199\u9501\u3002<\/p>\n<p>d) \u4e00\u53e5\u8bdd\u603b\u7ed3\uff1a\u8981\u4e48\u662f\u4e00\u4e2a\u6216\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u6709\u8bfb\u9501\uff0c\u8981\u4e48\u662f\u4e00\u4e2a\u7ebf<br \/>\n\u7a0b\u6709\u5199\u9501\uff0c\u4f46\u662f\u4e24\u8005\u4e0d\u4f1a\u540c\u65f6\u51fa\u73b0\uff08\u8981\u4e48\u591a\u8bfb\uff0c\u8981\u591a\u4e00\u5199\uff09<\/p>\n<pre>1. \u6362\u4e00\u79cd\u601d\u8def\u66f4\u5bb9\u6613\u7406\u89e3\uff1a\u8bfb\u5199\u9501\u53ea\u662f\u4e00\u628a\u9501\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e24\u79cd\u65b9\u5f0f\u9501\u5b9a\u8bfb\u9501\u5b9a\u548c\u5199\u9501\u5b9a\u3002\u8bfb\u5199\u9501\u53ef\u4ee5\u540c\u65f6\u88ab\u4e00\u4e2a\u6216\u591a\u4e2a\u7ebf\u7a0b\u8bfb\u9501\u5b9a\uff0c\u4e5f\u53ef\u4ee5\u88ab\u5355\u4e00\u7ebf\u7a0b\u5199\u9501\u5b9a\u3002\u4f46\u662f\u6c38\u8fdc\u4e0d\u80fd\u540c\u65f6\u5bf9\u8fd9\u628a\u9501\u8fdb\u884c\u8bfb\u9501\u5b9a\u548c\u5199\u9501\u5b9a\u3002\n2. \u8fd9\u91cc\u662f\u628a&quot;\u83b7\u53d6\u5199\u9501\u301e\u7406\u89e3\u4e3a\u201c\u628a\u8bfb\u5199\u9501\u8fdb\u884c\u5199\u9501\u5b9a\u301e\uff0c\u76f8\u5f53\u4e8e\u662f\u6362\u4e86\u4e00\u79cd\u601d\u8def\uff0c\u4e0d\u8fc7\u539f\u5219\u662f\u4e0d\u53d8\u7684\uff0c\u5c31\u662f\u8981\u4e48\u662f\u4e00\u4e2a\u6216\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u6709\u8bfb\u9501\uff08\u540c\u65f6\u8bfb\u9501\u5b9a\uff09\uff0c\u8981\u4e48\u662f\u4e00\u4e2a\u7ebf\u7a0b\u6709\u5199\u9501\uff08\u8fdb\u884c\u5199\u9501\u5b9a\uff09\uff0c\u4f46\u662f\u4e24\u8005\u4e0d\u4f1a\u540c\u65f6\u51fa\u73b0<\/pre>\n<p>\u4ee3\u7801\u6848\u4f8b\uff1a<br \/>\n\u7ebf\u7a0b1\u548c2\u4e3a\u8bfb\u9501\uff0c3\u548c4\u4e3a\u5199\u9501<\/p>\n<pre>package lock.readwrite;\n\nimport java.util.concurrent.locks.ReentrantReadWriteLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     TODO\n *\/\npublic class CinemaReadWrite {\n\n    private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();\n    private static ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();\n    private static ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();\n\n    private static void read() {\n        readLock.lock();\n        try {\n            System.out.println(Thread.currentThread().getName() + &quot;\u5f97\u5230\u4e86\u8bfb\u9501\uff0c\u6b63\u5728\u8bfb\u53d6&quot;);\n            Thread.sleep(1000);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } finally {\n            System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u8bfb\u9501&quot;);\n            readLock.unlock();\n        }\n    }\n\n    private static void write() {\n        writeLock.lock();\n        try {\n            System.out.println(Thread.currentThread().getName() + &quot;\u5f97\u5230\u4e86\u5199\u9501\uff0c\u6b63\u5728\u5199\u5165&quot;);\n            Thread.sleep(1000);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } finally {\n            System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u5199\u9501&quot;);\n            writeLock.unlock();\n        }\n    }\n\n    public static void main(String[] args) {\n        new Thread(()-&gt;read(),&quot;Thread1&quot;).start();\n        new Thread(()-&gt;read(),&quot;Thread2&quot;).start();\n        new Thread(()-&gt;write(),&quot;Thread3&quot;).start();\n        new Thread(()-&gt;write(),&quot;Thread4&quot;).start();\n    }\n}<\/pre>\n<p>\u6267\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20251217-044049-uv.png\" alt=\"20251217-044049-uv.png\" \/><\/p>\n<p>\u8bfb\u9501\u5171\u4eab\uff0c\u53ef\u4ee5\u540c\u65f6\u8fdb\u884c\uff1b \u5199\u9501\u6392\u4ed6\uff0c\u72ec\u7acb\u8fdb\u884c\u3002<\/p>\n<p><strong>\u8bfb\u9501\u63d2\u961f\u7b56\u7565<\/strong><br \/>\n\u516c\u5e73\u9501\uff1a\u4e0d\u5141\u8bb8\u63d2\u961f<\/p>\n<p>\u975e\u516c\u5e73\u9501<\/p>\n<ol>\n<li>\u5199\u9501\u53ef\u4ee5\u968f\u65f6\u63d2\u961f\uff08\u548c\u975e\u53ef\u91cd\u5165\u9501\u7c7b\u4f3c\uff0c\u4e0a\u6765\u5c31\u63d2\u961f\uff0c\u62ff\u4e0d\u5230\u9501\u518d\u6392\u961f\uff09<\/li>\n<li>\u8bfb\u9501\u4ec5\u5728\u7b49\u5f85\u961f\u5217\u5934\u7ed3\u70b9\u4e0d\u662f\u60f3\u83b7\u53d6\u5199\u9501\u7684\u7ebf\u7a0b\u7684\u65f6\u5019<br \/>\n\u53ef\u4ee5\u63d2\u961f<\/li>\n<\/ol>\n<p>\u9a8c\u8bc1\u975e\u516c\u5e73\u548c\u516c\u5e73\u7684ReentrantReadWriteLock\u7684\u7b56\u7565<\/p>\n<pre>package lock.readwrite;\n\nimport java.util.concurrent.locks.ReentrantReadWriteLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793a\u975e\u516c\u5e73\u548c\u516c\u5e73\u7684ReentrantReadWriteLock\u7684\u7b56\u7565\n *\/\npublic class NonfairBargeDemo {\n\n    private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(\n            );\n\n    private static ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();\n    private static ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();\n\n    private static void read() {\n        System.out.println(Thread.currentThread().getName() + &quot;\u5f00\u59cb\u5c1d\u8bd5\u83b7\u53d6\u8bfb\u9501&quot;);\n        readLock.lock();\n        try {\n            System.out.println(Thread.currentThread().getName() + &quot;\u5f97\u5230\u8bfb\u9501\uff0c\u6b63\u5728\u8bfb\u53d6&quot;);\n            try {\n                Thread.sleep(20);\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n        } finally {\n            System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u8bfb\u9501&quot;);\n            readLock.unlock();\n        }\n    }\n\n    private static void write() {\n        System.out.println(Thread.currentThread().getName() + &quot;\u5f00\u59cb\u5c1d\u8bd5\u83b7\u53d6\u5199\u9501&quot;);\n        writeLock.lock();\n        try {\n            System.out.println(Thread.currentThread().getName() + &quot;\u5f97\u5230\u5199\u9501\uff0c\u6b63\u5728\u5199\u5165&quot;);\n            try {\n                Thread.sleep(40);\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n        } finally {\n            System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u5199\u9501&quot;);\n            writeLock.unlock();\n        }\n    }\n\n    public static void main(String[] args) {\n        new Thread(()-&gt;write(),&quot;Thread1&quot;).start();\n        new Thread(()-&gt;read(),&quot;Thread2&quot;).start();\n        new Thread(()-&gt;read(),&quot;Thread3&quot;).start();\n        new Thread(()-&gt;write(),&quot;Thread4&quot;).start();\n        new Thread(()-&gt;read(),&quot;Thread5&quot;).start();\n        new Thread(new Runnable() {\n            @Override\n            public void run() {\n                Thread thread[] = new Thread[1000];\n                for (int i = 0; i &lt; 1000; i++) {\n                    thread[i] = new Thread(() -&gt; read(), &quot;\u5b50\u7ebf\u7a0b\u521b\u5efa\u7684Thread&quot; + i);\n                }\n                for (int i = 0; i &lt; 1000; i++) {\n                    thread[i].start();\n                }\n            }\n        }).start();\n    }\n}<\/pre>\n<p>\u975e\u516c\u5e73\u9501\u65f6\uff0c\u5b50\u7ebf\u7a0b\u7684\u8bfb\u9501\u5c1d\u8bd5\u83b7\u53d6\u9501\u65f6\uff0c\u4f1a\u5728\u7b2c\u4e00\u4e2a\u5199\u9501\u91ca\u653e\u540e\u63d2\u961f<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260110-062449-v7.png\" alt=\"20260110-062449-v7.png\" \/><\/p>\n<p>\u800cThread2\uff0cThread3\u91ca\u653e\u8bfb\u9501\u540e\uff0c\u961f\u5217\u8f6e\u5230Thread4\u5f97\u5230\u5199\u9501\uff0c\u540e\u7eed\u5b50\u7ebf\u7a0b\u7684\u5199\u9501\u65e0\u6cd5\u518d\u63d2\u961f<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260110-062714-RV.png\" alt=\"20260110-062714-RV.png\" \/><\/p>\n<p>\u9002\u7528\u573a\u5408\uff1a\u76f8\u6bd4\u4e8eReentrantLock\u9002\u7528\u4e8e\u4e00\u822c\u573a\u5408\uff0c<br \/>\nReentrantReadWriteLock\u9002\u7528\u4e8e\u8bfb\u591a\u5199\u5c11\u7684\u60c5\u51b5\uff0c\u5408\u7406\u4f7f\u7528\u53ef\u4ee5\u8fdb<br \/>\n\u4e00\u6b65\u63d0\u9ad8\u5e76\u53d1\u6548\u7387\u3002 <\/p>\n<h4>\u9501\u7684\u5347\u964d\u7ea7<\/h4>\n<p>\u4e3a\u4ec0\u4e48\u9700\u8981\u5347\u964d\u7ea7\uff1f<br \/>\n\uff08\u5728\u62ff\u5230\u5199\u9501\u5199\u5165\u540e\uff0c\u9700\u8981\u8bfb\uff0c\u4f46\u662f\u4e0d\u9700\u8981\u5199\u4e86\u7684\u573a\u666f\uff0c\u907f\u514d\u6d6a\u8d39\u8d44\u6e90\u548c\u91cd\u65b0\u6392\u961f\u62ff\u8bfb\u9501\uff0c\u4ece\u5199\u9501\u964d\u7ea7\u5230\u8bfb\u9501\uff09<\/p>\n<p>\u652f\u6301\u9501\u7684\u964d\u7ea7\uff0c\u4e0d\u652f\u6301\u5347\u7ea7<\/p>\n<p>\u4ee3\u7801\u6f14\u793a<\/p>\n<pre>package lock.readwrite;\n\nimport java.util.concurrent.atomic.AtomicInteger;\nimport java.util.concurrent.locks.ReentrantReadWriteLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u6f14\u793aReentrantReadWriteLock\u53ef\u4ee5\u964d\u7ea7\uff0c\u4e0d\u80fd\u5347\u7ea7\n *\/\npublic class Upgrading {\n\n    private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(\n            false);\n    private static ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();\n    private static ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();\n\n    private static void readUpgrading() {\n        readLock.lock();\n        try {\n            System.out.println(Thread.currentThread().getName() + &quot;\u5f97\u5230\u4e86\u8bfb\u9501\uff0c\u6b63\u5728\u8bfb\u53d6&quot;);\n            Thread.sleep(1000);\n            System.out.println(&quot;\u5347\u7ea7\u4f1a\u5e26\u6765\u963b\u585e&quot;);\n            writeLock.lock();\n            System.out.println(Thread.currentThread().getName() + &quot;\u83b7\u53d6\u5230\u4e86\u5199\u9501\uff0c\u5347\u7ea7\u6210\u529f&quot;);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } finally {\n            System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u8bfb\u9501&quot;);\n            readLock.unlock();\n        }\n    }\n\n    private static void writeDowngrading() {\n        writeLock.lock();\n        try {\n            System.out.println(Thread.currentThread().getName() + &quot;\u5f97\u5230\u4e86\u5199\u9501\uff0c\u6b63\u5728\u5199\u5165&quot;);\n            Thread.sleep(1000);\n            readLock.lock();\n            System.out.println(&quot;\u5728\u4e0d\u91ca\u653e\u5199\u9501\u7684\u60c5\u51b5\u4e0b\uff0c\u76f4\u63a5\u83b7\u53d6\u8bfb\u9501\uff0c\u6210\u529f\u964d\u7ea7&quot;);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        } finally {\n            readLock.unlock();\n            System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u5199\u9501&quot;);\n            writeLock.unlock();\n        }\n    }\n\n    public static void main(String[] args) throws InterruptedException {\n        System.out.println(&quot;\u5148\u6f14\u793a\u964d\u7ea7\u662f\u53ef\u4ee5\u7684&quot;);\n        Thread thread1 = new Thread(() -&gt; writeDowngrading(), &quot;Thread1&quot;);\n        thread1.start();\n        thread1.join();\n        System.out.println(&quot;------------------&quot;);\n        System.out.println(&quot;\u6f14\u793a\u5347\u7ea7\u662f\u4e0d\u884c\u7684&quot;);\n        Thread thread2 = new Thread(() -&gt; readUpgrading(), &quot;Thread2&quot;);\n        thread2.start();\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260110-064022-5P.png\" alt=\"20260110-064022-5P.png\" \/><\/p>\n<p>\u6ca1\u6709\u6253\u5370\uff1a\u83b7\u53d6\u5230\u4e86\u5199\u9501\uff0c\u5347\u7ea7\u6210\u529f<br \/>\n\u8bf4\u660ereadLock.lock()\u540e\u6ca1\u6709\u91ca\u653e\uff0c\u76f4\u63a5writeLock.lock()\u88ab\u963b\u585e\u4e86\u3002<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260110-064116-CI.png\" alt=\"20260110-064116-CI.png\" \/><\/p>\n<p>\u4e3a\u4ec0\u4e48\u4e0d\u652f\u6301\u9501\u7684\u5347\u7ea7\uff1f<br \/>\n\u5982\u679c\u540c\u65f6\u5b58\u5728\u4e24\u4e2a\u8bfb\u9501\u8981\u5347\u7ea7\u5199\u9501\uff0c\u5219\u5bb9\u6613\u6b7b\u9501\u3002<\/p>\n<h3 id=\"h3-9\">\u81ea\u65cb\u9501\u548c\u963b\u585e\u9501<\/h3>\n<p>\u81ea\u65cb\u9501\u7684\u6765\u6e90\u4e0e\u6982\u8ff0\uff1a<br \/>\n\u963b\u585e\u6216\u5524\u9192\u4e00\u4e2aJava\u7ebf\u7a0b\u9700\u8981\u64cd\u4f5c\u7cfb\u7edf\u5207\u6362CPU\u72b6\u6001\u6765\u5b8c\u6210\uff0c\u8fd9\u79cd\u72b6\u6001\u8f6c\u6362\u9700\u8981\u8017\u8d39\u5904\u7406\u5668\u65f6\u95f4<\/p>\n<p>\u5982\u679c\u540c\u6b65\u4ee3\u7801\u5757\u4e2d\u7684\u5185\u5bb9\u8fc7\u4e8e\u7b80\u5355\uff0c\u72b6\u6001\u8f6c\u6362\u6d88\u8017\u7684\u65f6\u95f4\u6709\u53ef\u80fd\u6bd4\u7528\u6237\u4ee3\u7801\u6267\u884c\u7684\u65f6\u95f4\u8fd8\u8981\u957f<\/p>\n<p>\u5728\u8bb8\u591a\u573a\u666f\u4e2d\uff0c\u540c\u6b65\u8d44\u6e90\u7684\u9501\u5b9a\u65f6\u95f4\u5f88\u77ed\uff0c\u4e3a\u4e86\u8fd9\u4e00\u5c0f\u6bb5\u65f6\u95f4\u53bb\u5207\u6362\u7ebf\u7a0b\uff0c\u7ebf\u7a0b\u6302\u8d77\u548c\u6062\u590d\u73b0\u573a\u7684\u82b1\u8d39\u53ef\u80fd\u4f1a\u8ba9\u7cfb\u7edf\u5f97\u4e0d\u507f\u5931<\/p>\n<p>\u5982\u679c\u7269\u7406\u673a\u5668\u6709\u591a\u4e2a\u5904\u7406\u5668\uff0c\u80fd\u591f\u8ba9\u4e24\u4e2a\u6216\u4ee5\u4e0a\u7684\u7ebf\u7a0b\u540c\u65f6\u5e76\u884c\u6267\u884c\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u8ba9\u540e\u9762\u90a3\u4e2a\u8bf7\u6c42\u9501\u7684\u7ebf\u7a0b\u4e0d\u653e\u5f03CPU\u7684\u6267\u884c\u65f6\u95f4\uff0c\u770b\u770b\u6301\u6709\u9501\u7684\u7ebf\u7a0b\u662f\u5426\u5f88\u5feb\u5c31\u4f1a\u91ca\u653e\u9501\u800c\u4e3a\u4e86\u8ba9\u5f53\u524d\u7ebf\u7a0b\u201c\u7a0d\u7b49\u4e00\u4e0b\u301e\uff0c\u6211\u4eec\u9700\u8ba9\u5f53\u524d\u7ebf\u7a0b\u8fdb\u884c\u81ea\u65cb\u3002<\/p>\n<p>\u5982\u679c\u5728\u81ea\u65cb\u5b8c\u6210\u540e\u524d\u9762\u9501\u5b9a\u540c\u6b65\u8d44\u6e90\u7684\u7ebf\u7a0b\u5df1\u7ecf\u91ca\u653e\u4e86\u9501\uff0c\u90a3\u4e48\u5f53\u524d\u7ebf\u7a0b\u5c31\u53ef\u4ee5\u4e0d\u5fc5\u963b\u585e\u800c\u662f\u76f4\u63a5\u83b7\u53d6\u540c\u6b65\u8d44\u6e90\u800c\u907f\u514d\u5207\u6362\u7ebf\u7a0b\u7684\u5f00\u9500\u3002\u8fd9\u5c31\u662f\u81ea\u65cb\u9501\u3002<\/p>\n<p>\u963b\u585e\u9501\u548c\u81ea\u65cb\u9501\u76f8\u53cd\uff0c\u963b\u585e\u9501\u5982\u679c\u9047\u5230\u6ca1\u62ff\u5230\u9501\u7684\u60c5\u51b5\uff0c\u4f1a\u76f4\u63a5<br \/>\n\u628a\u7ebf\u7a0b\u963b\u585e\uff0c\u76f4\u5230\u88ab\u5524\u9192<\/p>\n<p>\u81ea\u65cb\u9501\u7684\u7f3a\u70b9\uff1b<br \/>\n\u5982\u679c\u9501\u88ab\u5360\u7528\u7684\u65f6\u95f4\u5f88\u957f\uff0c\u90a3\u4e48\u81ea\u65cb\u7684\u7ebf\u7a0b\u53ea\u4f1a\u767d\u6d6a\u8d39\u5904\u7406\u5668\u8d44<br \/>\n\u6e90\uff0c\u5728\u81ea\u65cb\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e00\u76f4\u6d88\u8017cpu\uff0c\u6240\u4ee5\u867d\u7136\u81ea\u65cb\u9501\u7684\u8d77\u59cb\u5f00\u9500\u4f4e<br \/>\n\u4e8e\u60b2\u89c2\u9501\uff0c\u4f46\u662f\u968f\u7740\u81ea\u65cb\u65f6\u95f4\u7684\u589e\u957f\uff0c\u5f00\u9500\u4e5f\u662f\u7ebf\u6027\u589e\u957f\u7684<\/p>\n<p>\u539f\u7406\u548c\u6e90\u7801\u5206\u6790\uff1b<br \/>\n\u5728Java1.5\u7248\u672c\u53ca\u4ee5\u4e0a\u7684\u5e76\u53d1\u6846\u67b6java.util.concurrent \u7684atmoic<br \/>\n\u5305\u4e0b\u7684\u7c7b\u57fa\u672c\u90fd\u662f\u81ea\u65cb\u9501\u7684\u5b9e\u73b0<br \/>\nAtomicInteger\u7684\u5b9e\u73b0\uff1a\u81ea\u65cb\u9501\u7684\u5b9e\u73b0\u539f\u7406\u662fCAS<br \/>\nAtomicinteger\u4e2d\u8c03\u7528unsafe\u8fdb\u884c\u81ea\u589e\u64cd\u4f5c\u7684\u6e90\u7801\u4e2d\u7684do-while<br \/>\n\u5faa\u73af\u5c31\u662f\u4e00\u4e2a\u81ea\u65cb\u64cd\u4f5c\uff0c\u5982\u679c\u4fee\u6539\u8fc7\u7a0b\u4e2d\u9047\u5230\u5176\u4ed6\u7ebf\u7a0b\u7ade\u4e89\u5bfc\u81f4<br \/>\n\u6ca1\u4fee\u6539\u6210\u529f\uff0c\u5c31\u5728while\u91cc\u6b7b\u5faa\u73af\uff0c\u76f4\u81f3\u4fee\u6539\u6210\u529f<br \/>\n\u6e90\u7801\u5982\u56fe\uff1a<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260110-065448-JL.png\" alt=\"20260110-065448-JL.png\" \/><\/p>\n<p>\u81ea\u5df1\u5b9e\u73b0\u7b80\u5355\u7684\u81ea\u65cb\u9501\uff1a<\/p>\n<pre>package lock.spinlock;\n\nimport java.util.concurrent.atomic.AtomicReference;\n\n\/**\n * \u63cf\u8ff0\uff1a     \u81ea\u65cb\u9501\n *\/\npublic class SpinLock {\n\n    private AtomicReference&lt;Thread&gt; sign = new AtomicReference&lt;&gt;();\n\n    public void lock() {\n        Thread current = Thread.currentThread();\n        while (!sign.compareAndSet(null, current)) {\n            System.out.println(&quot;\u81ea\u65cb\u83b7\u53d6\u5931\u8d25\uff0c\u518d\u6b21\u5c1d\u8bd5&quot;);\n        }\n    }\n\n    public void unlock() {\n        Thread current = Thread.currentThread();\n        sign.compareAndSet(current, null);\n    }\n\n    public static void main(String[] args) {\n        SpinLock spinLock = new SpinLock();\n        Runnable runnable = new Runnable() {\n            @Override\n            public void run() {\n                System.out.println(Thread.currentThread().getName() + &quot;\u5f00\u59cb\u5c1d\u8bd5\u83b7\u53d6\u81ea\u65cb\u9501&quot;);\n                spinLock.lock();\n                System.out.println(Thread.currentThread().getName() + &quot;\u83b7\u53d6\u5230\u4e86\u81ea\u65cb\u9501&quot;);\n                try {\n                    Thread.sleep(300);\n                } catch (InterruptedException e) {\n                    e.printStackTrace();\n                } finally {\n                    spinLock.unlock();\n                    System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u4e86\u81ea\u65cb\u9501&quot;);\n                }\n            }\n        };\n        Thread thread1 = new Thread(runnable);\n        Thread thread2 = new Thread(runnable);\n        thread1.start();\n        thread2.start();\n    }\n}<\/pre>\n<p>\u6267\u884c\u7ed3\u679c\uff1a<br \/>\nthread0\u83b7\u53d6\u9501\u540e\uff0cthread1\u4e0d\u65ad\u81ea\u65cb\u5c1d\u8bd5\uff0c\u76f4\u5230thread0\u9501\u91ca\u653e<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260110-070156-0x.png\" alt=\"20260110-070156-0x.png\" \/><\/p>\n<p>\u81ea\u65cb\u9501\u7684\u9002\u7528\u573a\u666f\uff1a<br \/>\n\u81ea\u65cb\u9501\u4e00\u822c\u7528\u4e8e\u591a\u6838\u7684\u670d\u52a1\u5668\uff0c\u5728\u5e76\u53d1\u5ea6\u4e0d\u662f\u7279\u522b\u9ad8\u7684\u60c5\u51b5\u4e0b\uff0c\u6bd4\u963b\u585e\u9501\u7684\u6548\u7387\u9ad8<br \/>\n\u53e6\u5916\uff0c\u81ea\u65cb\u9501\u9002\u7528\u4e8e\u4e34\u754c\u533a\u6bd4\u8f83\u77ed\u5c0f\u7684\u60c5\u51b5\uff0c\u5426\u5219\u5982\u679c\u4e34\u754c\u533a\u5f88\u5927\uff08\u7ebf\u7a0b\u4e00\u65e6\u62ff\u5230\u9501\uff0c\u5f88\u4e45\u4ee5\u540e\u624d\u4f1a\u91ca\u653e\uff09\uff0c\u90a3\u4e5f\u662f\u4e0d\u5408\u9002\u7684<\/p>\n<h3 id=\"h3-10\">\u53ef\u4e2d\u65ad\u9501<\/h3>\n<p>\u5728Java\u4e2d\uff0csynchronized\u5c31\u4e0d\u662f\u53ef\u4e2d\u65ad\u9501\uff0c\u800cLock\u662f\u53ef\u4e2d\u65ad\u9501\uff0c<br \/>\n\u56e0\u4e3atryLock(time)\u548clocklnterruptibly\u90fd\u80fd\u54cd\u5e94\u4e2d\u65ad\u3002<\/p>\n<p>\u5982\u679c\u67d0\u4e00\u7ebf\u7a0bA\u6b63\u5728\u6267\u884c\u9501\u4e2d\u7684\u4ee3\u7801\uff0c\u53e6\u4e00\u7ebf\u7a0bB\u6b63\u5728\u7b49\u5f85\u83b7\u53d6\u8be5\u9501\uff0c<br \/>\n\u53ef\u80fd\u7531\u4e8e\u7b49\u5f85\u65f6\u95f4\u8fc7\u957f\uff0c\u7ebf\u7a0bB\u4e0d\u60f3\u7b49\u5f85\u4e86\uff0c\u60f3\u5148\u5904\u7406\u5176\u4ed6\u4e8b\u60c5\uff0c<br \/>\n\u6211\u4eec\u53ef\u4ee5\u4e2d\u65ad\u5b83\uff0c\u8fd9\u79cd\u5c31\u662f\u53ef\u4e2d\u65ad\u9501<\/p>\n<p>\u4ee3\u7801\u6f14\u793a\uff1a<\/p>\n<pre>package lock.lock;\n\nimport java.util.concurrent.ThreadPoolExecutor;\nimport java.util.concurrent.locks.Lock;\nimport java.util.concurrent.locks.ReentrantLock;\n\n\/**\n * \u63cf\u8ff0\uff1a     TODO\n *\/\npublic class LockInterruptibly implements Runnable {\n\n    private Lock lock = new ReentrantLock();\npublic static void main(String[] args) {\n    LockInterruptibly lockInterruptibly = new LockInterruptibly();\n    Thread thread0 = new Thread(lockInterruptibly);\n    Thread thread1 = new Thread(lockInterruptibly);\n    thread0.start();\n    thread1.start();\n\n    try {\n        Thread.sleep(2000);\n    } catch (InterruptedException e) {\n        e.printStackTrace();\n    }\n    thread0.interrupt(); \/\/ \u4e2d\u65ad\u7ebf\u7a0b\u6267\u884c\n}\n    @Override\n    public void run() {\n        System.out.println(Thread.currentThread().getName() + &quot;\u5c1d\u8bd5\u83b7\u53d6\u9501&quot;);\n        try {\n            lock.lockInterruptibly();\n            try {\n                System.out.println(Thread.currentThread().getName() + &quot;\u83b7\u53d6\u5230\u4e86\u9501&quot;);\n                Thread.sleep(5000);\n            } catch (InterruptedException e) {\n                System.out.println(Thread.currentThread().getName() + &quot;\u7761\u7720\u671f\u95f4\u88ab\u4e2d\u65ad\u4e86&quot;);\n            } finally {\n                lock.unlock();\n                System.out.println(Thread.currentThread().getName() + &quot;\u91ca\u653e\u4e86\u9501&quot;);\n            }\n        } catch (InterruptedException e) {\n            System.out.println(Thread.currentThread().getName() + &quot;\u83b7\u5f97\u9501\u671f\u95f4\u88ab\u4e2d\u65ad\u4e86&quot;);\n        }\n    }\n}<\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c<br \/>\n<img alt=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" title=\"JUC\u5e76\u53d1\u7f16\u7a0b(\u4e09)\u2014\u2014\u9501-Nick\u306e\u535a\u5ba2\" src=\"https:\/\/upyun.qkongtao.cn\/kodbox\/202602\/20260110-070744-XI.png\" alt=\"20260110-070744-XI.png\" \/><\/p>\n<h2 id=\"h2-11\">\u9501\u4f18\u5316<\/h2>\n<h3 id=\"h3-12\">Java\u865b\u62df\u673a\u5bf9\u9501\u7684\u4f18\u5316<\/h3>\n<p>\u81ea\u65cb\u9501\u548c\u81ea\u9002\u5e94<br \/>\n\u9501\u6d88\u9664<br \/>\n\u9501\u7c97\u5316<\/p>\n<h3 id=\"h3-13\">\u5728\u5199\u4ee3\u7801\u65f6\u5982\u4f55\u4f18\u5316\u9501\u548c\u63d0\u9ad8\u5e76\u53d1\u6027\u80fd<\/h3>\n<ol>\n<li>\u7f29\u5c0f\u540c\u6b65\u4ee3\u7801\u5757<\/li>\n<li>\u5c3d\u91cf\u4e0d\u8981\u9501\u4f4f\u65b9\u6cd5<\/li>\n<li>\u51cf\u5c11\u8bf7\u6c42\u9501\u7684\u6b21\u6570<\/li>\n<li>\u907f\u514d\u4eba\u4e3a\u5236\u9020&quot;\u70ed\u70b9&quot;\uff08Map\u5168\u5c40\u904d\u5386\u7b49\uff09<\/li>\n<li>\u9501\u4e2d\u5c3d\u91cf\u4e0d\u8981\u518d\u5305\u542b\u9501<\/li>\n<li>\u9009\u62e9\u5408\u9002\u7684\u9501\u7c7b\u578b\u6216\u5408\u9002\u7684\u5de5\u5177\u7c7b<\/li>\n<\/ol>\n","excerpt":"<p>\u5343\u53d8\u4e07\u5316\u7684\u9501 Lock\u63a5\u53e3 \u9501\u7684\u5206\u7c7b \u4e50\u89c2\u9501\u548c\u60b2\u89c2\u9501 \u53ef\u91cd\u5165\u9501\u548c\u975e\u53ef\u91cd\u5165\u9501\uff0c\u5df2ReentrantLock\u4e3a\u4f8b\uff08\u91cd\u70b9\uff09 \u516c\u5e73\u9501\u548c\u975e\u516c\u5e73\u9501 \u5171\u4eab\u9501\u548c\u6392\u5b83\u9501\uff1a\u4ee5ReentrantReadWriteLock\u8bfb\u5199\u9501\u4e3a\uff08\u91cd\u70b9\uff09 \u81ea\u65cb\u9501\u548c\u963b\u585e\u9501 \u53ef\u4e2d\u65ad\u9501\uff1a\u987e\u540d\u601d\u4e49\uff0c\u5c31\u662f\u53ef\u4ee5\u54cd\u5e94\u4e2d\u65ad\u7684\u9501 \u9501\u4f18\u5316 L &#8230;<\/p>\n","date":"2025-06-05 01:19:40","modified":"2026-03-05 17:04:47","categories":[{"id":80,"slug":"java","title":"java","description":"","parent":63,"post_count":45},{"id":231,"slug":"juc","title":"JUC","description":"","parent":80,"post_count":9},{"id":63,"slug":"%e5%90%8e%e7%ab%af","title":"\u540e\u7aef","description":"","parent":43,"post_count":148},{"id":43,"slug":"studynote","title":"\u5b66\u4e60\u7b14\u8bb0","description":"","parent":0,"post_count":192}],"tags":[{"id":82,"slug":"java","title":"java","description":"","post_count":66},{"id":232,"slug":"juc","title":"JUC","description":"","post_count":9}],"author":{"id":1,"slug":"nick","name":"Nick","first_name":"","last_name":"","nickname":"Nick","url":"","description":""},"comments":[],"attachments":[],"comment_count":0,"comment_status":"open","thumbnail":null,"custom_fields":{"classic-editor-remember":["classic-editor"],"\u65e5\u5fd7\u5934\u56fe":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"\u5206\u7c7bslider\u56fe\u7247\u5730\u5740":["https:\/\/qiniu.qkongtao.cn\/2026\/02\/20260226164402880-scaled-e1772124284761.jpg"],"bigfa_ding":["0"],"\u6253\u8d4f":["checked"],"seo\u5173\u952e\u8bcd":[""],"seo\u63cf\u8ff0":[""],"bpu":["1|20260227"],"views":["182"]},"thumbnail_size":"thumbnail","thumbnail_images":[]}]}