{"id":667,"date":"2019-10-23T19:30:04","date_gmt":"2019-10-23T11:30:04","guid":{"rendered":"http:\/\/toradora.xyz\/?p=667"},"modified":"2019-10-23T19:30:04","modified_gmt":"2019-10-23T11:30:04","slug":"%e4%b9%90%e8%a7%82%e9%94%81%e6%82%b2%e8%a7%82%e9%94%81","status":"publish","type":"post","link":"https:\/\/diuut.com\/?p=667","title":{"rendered":"\u4e50\u89c2\u9501&#038;\u60b2\u89c2\u9501"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote\"><p>\u9700\u8981\u4f7f\u7528\u9501\u7684\u573a\u666f<\/p><cite>\u6ee1\u8db3\u591a\u4e2a\u7ebf\u7a0b\u5171\u540c\u64cd\u4f5c\u540c\u4e00\u5171\u4eab\u6587\u4ef6\u7684\u65f6\u5019\u53ef\u80fd\u53d1\u751f\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898<\/cite><\/blockquote>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_66_1 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\">\u76ee\u5f55<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/diuut.com\/?p=667\/#%E6%82%B2%E8%A7%82%E9%94%81_%EF%BC%88Pessimistic_Lock%EF%BC%89\" title=\"\u60b2\u89c2\u9501 \uff08Pessimistic Lock\uff09 \">\u60b2\u89c2\u9501 \uff08Pessimistic Lock\uff09 <\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/diuut.com\/?p=667\/#%E6%8E%92%E5%AE%83%E9%94%81%E8%AF%BB%E9%94%81%EF%BC%9AFOR_UPDATE\" title=\"    \u6392\u5b83\u9501\/\u8bfb\u9501\uff1aFOR UPDATE\">    \u6392\u5b83\u9501\/\u8bfb\u9501\uff1aFOR UPDATE<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/diuut.com\/?p=667\/#%E5%85%B1%E4%BA%AB%E9%94%81%E5%86%99%E9%94%81%EF%BC%9ALOCK_IN_SHARE_MODE\" title=\"    \u5171\u4eab\u9501\/\u5199\u9501\uff1aLOCK IN SHARE MODE\">    \u5171\u4eab\u9501\/\u5199\u9501\uff1aLOCK IN SHARE MODE<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/diuut.com\/?p=667\/#%E4%B9%90%E8%A7%82%E9%94%81_%EF%BC%88Optimistic_Lock%EF%BC%89\" title=\"\u4e50\u89c2\u9501 \uff08Optimistic Lock\uff09 \">\u4e50\u89c2\u9501 \uff08Optimistic Lock\uff09 <\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%E6%82%B2%E8%A7%82%E9%94%81_%EF%BC%88Pessimistic_Lock%EF%BC%89\"><\/span>\u60b2\u89c2\u9501 \uff08Pessimistic Lock\uff09 <span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>  \u987e\u540d\u601d\u4e49\uff0c\u5c31\u662f\u5f88\u60b2\u89c2\uff0c\u6bcf\u6b21\u53bb\u62ff\u6570\u636e\u7684\u65f6\u5019\u90fd\u8ba4\u4e3a\u522b\u4eba\u4f1a\u4fee\u6539\uff0c\u6240\u4ee5\u6bcf\u6b21\u5728\u62ff\u6570\u636e\u7684\u65f6\u5019\u90fd\u4f1a\u4e0a\u9501\uff0c\u8fd9\u6837\u522b\u4eba\u60f3\u62ff\u8fd9\u4e2a\u6570\u636e\u5c31\u4f1ablock\u76f4\u5230\u5b83\u62ff\u5230\u9501\u3002 <\/p>\n\n\n\n<p> Java synchronized \u5c31\u5c5e\u4e8e\u60b2\u89c2\u9501\u7684\u4e00\u79cd\u5b9e\u73b0\uff0c\u6bcf\u6b21\u7ebf\u7a0b\u8981\u4fee\u6539\u6570\u636e\u65f6\u90fd\u5148\u83b7\u5f97\u9501\uff0c\u4fdd\u8bc1\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a\u7ebf\u7a0b\u80fd\u64cd\u4f5c\u6570\u636e\uff0c\u5176\u4ed6\u7ebf\u7a0b\u5219\u4f1a\u88abblock\u3002 <\/p>\n\n\n\n<h4><span class=\"ez-toc-section\" id=\"%E6%8E%92%E5%AE%83%E9%94%81%E8%AF%BB%E9%94%81%EF%BC%9AFOR_UPDATE\"><\/span>    \u6392\u5b83\u9501\/\u8bfb\u9501\uff1aFOR UPDATE<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>        \u53ea\u5141\u8bb8\u4e00\u4e2a\u7ebf\u7a0b\u8fdb\u884c\u64cd\u4f5c\uff0c\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u64cd\u4f5c\u65f6\u963b\u585e<\/p>\n\n\n\n<h4><span class=\"ez-toc-section\" id=\"%E5%85%B1%E4%BA%AB%E9%94%81%E5%86%99%E9%94%81%EF%BC%9ALOCK_IN_SHARE_MODE\"><\/span>    \u5171\u4eab\u9501\/\u5199\u9501\uff1aLOCK IN SHARE MODE<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>        \u5141\u8bb8\u591a\u4e2a\u7ebf\u7a0b\u8fdb\u884c\u8bfb\u53d6\u64cd\u4f5c\uff0c\u4f46\u5176\u4ed6\u64cd\u4f5c\u4f1a\u963b\u585e<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/\/\u60b2\u89c2\u9501\u793a\u4f8b\uff1a\u66f4\u65b0\u5e93\u5b58\npublic boolean updateStock(Long productId){\n\/\/\u5148\u9501\u5b9a\u5546\u54c1\u5e93\u5b58\u8bb0\u5f55\nProductStock product = query(&quot;SELECT * FROM tb_product_stock WHERE product_id=#{productId} FOR UPDATE&quot;, productId);\nif (product.getNumber() &amp;lt; 0) {\n            int updateCnt = update(&quot;UPDATE tb_product_stock SET number=number-1 WHERE product_id=#{productId}&quot;, productId);\n            if(updateCnt &amp;lt; 0){    \/\/\u66f4\u65b0\u5e93\u5b58\u6210\u529f\n                return true;\n            }\n        }\n        return false;\n    }\n<\/pre><\/code><\/pre>\n\n\n\n<h2><span class=\"ez-toc-section\" id=\"%E4%B9%90%E8%A7%82%E9%94%81_%EF%BC%88Optimistic_Lock%EF%BC%89\"><\/span>\u4e50\u89c2\u9501 \uff08Optimistic Lock\uff09 <span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p> \u987e\u540d\u601d\u4e49\uff0c\u5c31\u662f\u5f88\u4e50\u89c2\uff0c\u6bcf\u6b21\u53bb\u62ff\u6570\u636e\u7684\u65f6\u5019\u90fd\u8ba4\u4e3a\u522b\u4eba\u4e0d\u4f1a\u4fee\u6539\uff0c\u6240\u4ee5\u4e0d\u4f1a\u4e0a\u9501\uff0c\u4f46\u662f\u5728\u63d0\u4ea4\u66f4\u65b0\u7684\u65f6\u5019\u4f1a\u5224\u65ad\u4e00\u4e0b\u5728\u6b64\u671f\u95f4\u522b\u4eba\u6709\u6ca1\u6709\u53bb\u66f4\u65b0\u8fd9\u4e2a\u6570\u636e\u3002\u4e50\u89c2\u9501\u9002\u7528\u4e8e\u8bfb\u591a\u5199\u5c11\u7684\u5e94\u7528\u573a\u666f\uff0c\u8fd9\u6837\u53ef\u4ee5\u63d0\u9ad8\u541e\u5410\u91cf\u3002 <\/p>\n\n\n\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/\/\u4e50\u89c2\u9501\u793a\u4f8b\uff1a\u66f4\u65b0\u5e93\u5b58\n public boolean updateStock(Long productId){\n        int updateCnt = 0;\n        while (updateCnt == 0) {\n            ProductStock product = query(&quot;SELECT * FROM tb_product_stock WHERE product_id=#{productId}&quot;, productId);\n            if (product.getNumber() &amp;gt; 0) {\n                updateCnt = update(&quot;UPDATE tb_product_stock SET number=number-1 WHERE product_id=#{productId} AND number=#{number}&quot;, productId, product.getNumber());\n                if(updateCnt &amp;gt; 0){    \/\/\u66f4\u65b0\u5e93\u5b58\u6210\u529f\n                    return true;\n                }\n            } else {    \/\/\u5356\u5b8c\u5566\n                return false;\n            }\n        }\n        return false;\n    }\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u9700\u8981\u4f7f\u7528\u9501\u7684\u573a\u666f \u6ee1\u8db3\u591a\u4e2a\u7ebf\u7a0b\u5171\u540c\u64cd\u4f5c\u540c\u4e00\u5171\u4eab\u6587\u4ef6\u7684\u65f6\u5019\u53ef\u80fd\u53d1\u751f\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898 \u60b2\u89c2\u9501 \uff08Pessimistic<span class=\"more-button\"><a href=\"https:\/\/diuut.com\/?p=667\" class=\"more-link\">view all . . .<span class=\"screen-reader-text\">\u4e50\u89c2\u9501&#038;\u60b2\u89c2\u9501<\/span><\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":657,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/diuut.com\/index.php?rest_route=\/wp\/v2\/posts\/667"}],"collection":[{"href":"https:\/\/diuut.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/diuut.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/diuut.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/diuut.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=667"}],"version-history":[{"count":0,"href":"https:\/\/diuut.com\/index.php?rest_route=\/wp\/v2\/posts\/667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/diuut.com\/index.php?rest_route=\/wp\/v2\/media\/657"}],"wp:attachment":[{"href":"https:\/\/diuut.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/diuut.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/diuut.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}