{"id":4027,"date":"2024-05-04T09:00:45","date_gmt":"2024-05-04T01:00:45","guid":{"rendered":"https:\/\/xinchewhd.com.cn\/index.php\/%e9%9d%a2%e8%af%95\/%e9%9d%a2%e8%af%95%e5%ae%98%ef%bc%9a%e4%bb%80%e4%b9%88%e6%98%af%e9%94%81%ef%bc%9fjava%e4%b8%ad%e6%9c%89%e5%93%aa%e4%ba%9b%e4%b8%8d%e5%90%8c%e7%b1%bb%e5%9e%8b%e7%9a%84%e9%94%81%ef%bc%9f\/"},"modified":"2024-05-04T09:00:45","modified_gmt":"2024-05-04T01:00:45","slug":"%e9%9d%a2%e8%af%95%e5%ae%98%ef%bc%9a%e4%bb%80%e4%b9%88%e6%98%af%e9%94%81%ef%bc%9fjava%e4%b8%ad%e6%9c%89%e5%93%aa%e4%ba%9b%e4%b8%8d%e5%90%8c%e7%b1%bb%e5%9e%8b%e7%9a%84%e9%94%81%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/xinchewhd.com.cn\/index.php\/%e9%9d%a2%e8%af%95\/%e9%9d%a2%e8%af%95%e5%ae%98%ef%bc%9a%e4%bb%80%e4%b9%88%e6%98%af%e9%94%81%ef%bc%9fjava%e4%b8%ad%e6%9c%89%e5%93%aa%e4%ba%9b%e4%b8%8d%e5%90%8c%e7%b1%bb%e5%9e%8b%e7%9a%84%e9%94%81%ef%bc%9f\/","title":{"rendered":"\u9762\u8bd5\u5b98\uff1a\u4ec0\u4e48\u662f\u9501\uff1fJava\u4e2d\u6709\u54ea\u4e9b\u4e0d\u540c\u7c7b\u578b\u7684\u9501\uff1f"},"content":{"rendered":"<div class='wxsyncmain'>\n<p data-v-md-line=\"1\" style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u5728\u8ba1\u7b97\u673a\u79d1\u5b66\u4e2d\uff0c\u9501\u662f\u4e00\u79cd\u540c\u6b65\u673a\u5236\uff0c\u7528\u4e8e\u63a7\u5236\u591a\u4e2a\u7ebf\u7a0b\u6216\u8fdb\u7a0b\u5bf9\u5171\u4eab\u8d44\u6e90\uff08\u5982\u6570\u636e\uff09\u7684\u8bbf\u95ee\uff0c\u4ee5\u9632\u6b62\u6570\u636e\u7ade\u6001\u548c\u786e\u4fdd\u6570\u636e\u4e00\u81f4\u6027\u3002\u5728Java\u4e2d\uff0c\u9501\u7684\u6982\u5ff5\u4e3b\u8981\u4f53\u73b0\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e0b\uff0c\u7528\u4e8e\u89e3\u51b3\u5e76\u53d1\u7f16\u7a0b\u4e2d\u7684\u540c\u6b65\u95ee\u9898\u3002<\/span><\/p>\n<p data-v-md-line=\"3\" style=\"box-sizing: inherit;line-height: 1.7;\"><strong><span style=\"font-size: 20px;\">Java\u4e2d\u6709\u51e0\u79cd\u4e0d\u540c\u7c7b\u578b\u7684\u9501\uff1a<\/span><\/strong><\/p>\n<p style=\"box-sizing: inherit;line-height: 1.7;margin-top: 16px;margin-bottom: 16px;\"><strong><span style=\"font-size: 18px;\">1\u3001\u5185\u90e8\u9501 (Intrinsic Locks)\u6216\u76d1\u89c6\u5668\u9501 (Monitor Locks)\uff1a<\/span><\/strong><\/p>\n<ul data-v-md-line=\"6\" style=\"box-sizing: inherit;line-height: 1.7;\" class=\"list-paddingleft-1\">\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u8fd9\u4e9b\u9501\u901a\u8fc7\u4f7f\u7528synchronized\u5173\u952e\u5b57\u6765\u83b7\u5f97\u3002\u6bcf\u4e2aJava\u5bf9\u8c61\u90fd\u6709\u4e00\u4e2a\u5185\u90e8\u9501\uff0c\u5f53\u4e00\u4e2a\u7ebf\u7a0b\u8fdb\u5165\u4e00\u4e2a\u5b9e\u4f8b\u65b9\u6cd5\u6216\u5757\u65f6\uff0c\u5b83\u4f1a\u81ea\u52a8\u83b7\u53d6\u8be5\u5bf9\u8c61\u7684\u9501\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u5982\u679c\u65b9\u6cd5\u662fstatic\u7684\uff0c\u5219\u5b83\u53d6\u5f97\u7684\u662f\u7c7b\u5bf9\u8c61\u5bf9\u5e94\u7684\u9501\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u793a\u4f8b\u4ee3\u7801\uff1a<\/span><\/p>\n<\/li>\n<\/ul>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"java\"><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__class\"><span class=\"code-snippet__keyword\">class<\/span> <span class=\"code-snippet__title\">Counter<\/span> <\/span>{<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">private<\/span> <span class=\"code-snippet__keyword\">int<\/span> count = <span class=\"code-snippet__number\">0<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">    <\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u4f7f\u7528\u5185\u90e8\u9501\u7684\u540c\u6b65\u65b9\u6cd5<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__function\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__keyword\">synchronized<\/span> <span class=\"code-snippet__keyword\">void<\/span> <span class=\"code-snippet__title\">increment<\/span><span class=\"code-snippet__params\">()<\/span> <\/span>{<\/span><\/code><code><span class=\"code-snippet_outer\">        count++;<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ \u4f7f\u7528\u5185\u90e8\u9501\u7684\u540c\u6b65\u4ee3\u7801\u5757<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__function\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__keyword\">void<\/span> <span class=\"code-snippet__title\">decrement<\/span><span class=\"code-snippet__params\">()<\/span> <\/span>{<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">synchronized<\/span>(<span class=\"code-snippet__keyword\">this<\/span>) {<\/span><\/code><code><span class=\"code-snippet_outer\">            count--;<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">}<\/span><\/code><\/pre>\n<\/section>\n<p data-v-md-line=\"27\" style=\"box-sizing: inherit;line-height: 1.7;margin-top: 16px;margin-bottom: 16px;\"><strong><span style=\"font-size: 18px;\">2\u3001\u663e\u5f0f\u9501 (Explicit Locks)\uff1a<\/span><\/strong><\/p>\n<ul data-v-md-line=\"28\" style=\"box-sizing: inherit;line-height: 1.7;\" class=\"list-paddingleft-1\">\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u5728java.util.concurrent.locks\u5305\u4e2d\u63d0\u4f9b\u4e86\u66f4\u590d\u6742\u7684\u9501\u673a\u5236\uff0c\u4f8b\u5982ReentrantLock\uff0c\u5141\u8bb8\u66f4\u7075\u6d3b\u7684\u9501\u7ba1\u7406\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">ReentrantLock\u652f\u6301\u91cd\u5165\uff0c\u610f\u5473\u7740\u5df2\u7ecf\u62e5\u6709\u8be5\u9501\u7684\u7ebf\u7a0b\u53ef\u4ee5\u518d\u6b21\u83b7\u53d6\u9501\u800c\u4e0d\u4f1a\u88ab\u963b\u585e\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u793a\u4f8b\u4ee3\u7801\uff1a<\/span><\/p>\n<\/li>\n<\/ul>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"cs\"><code><span class=\"code-snippet_outer\">import java.util.concurrent.locks.Lock;<\/span><\/code><code><span class=\"code-snippet_outer\">import java.util.concurrent.locks.ReentrantLock;<\/span><\/code><code><span class=\"code-snippet_outer\"><\/span><\/code><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__keyword\">class<\/span> <span class=\"code-snippet__title\">Counter<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">private<\/span> final Lock <span class=\"code-snippet__keyword\">lock<\/span> = <span class=\"code-snippet__keyword\">new<\/span> ReentrantLock();<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">private<\/span> <span class=\"code-snippet__keyword\">int<\/span> count = <span class=\"code-snippet__number\">0<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">    <\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__function\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__keyword\">void<\/span> <span class=\"code-snippet__title\">increment<\/span>(<span class=\"code-snippet__params\"><\/span>)<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">lock<\/span>.<span class=\"code-snippet__keyword\">lock<\/span>();<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            count++;<\/span><\/code><code><span class=\"code-snippet_outer\">        } <span class=\"code-snippet__keyword\">finally<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">lock<\/span>.unlock();<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">}<\/span><\/code><\/pre>\n<\/section>\n<p data-v-md-line=\"50\" style=\"box-sizing: inherit;line-height: 1.7;margin-top: 16px;margin-bottom: 16px;\"><strong><span style=\"font-size: 18px;\">3\u3001\u8bfb\/\u5199\u9501 (Read-Write Locks)\uff1a<\/span><\/strong><\/p>\n<ul data-v-md-line=\"51\" style=\"box-sizing: inherit;line-height: 1.7;\" class=\"list-paddingleft-1\">\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u4f8b\u5982ReentrantReadWriteLock\uff0c\u5141\u8bb8\u591a\u4e2a\u7ebf\u7a0b\u540c\u65f6\u8bfb\u53d6\uff0c\u4f46\u53ea\u5141\u8bb8\u4e00\u4e2a\u7ebf\u7a0b\u8fdb\u884c\u5199\u5165\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u5b83\u5305\u542b\u4e00\u5bf9\u9501\uff1a\u4e00\u4e2a\u8bfb\u9501\u548c\u4e00\u4e2a\u5199\u9501\uff0c\u901a\u8fc7\u5206\u79bb\u8bfb\u548c\u5199\u64cd\u4f5c\u6765\u63d0\u9ad8\u6027\u80fd\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u793a\u4f8b\u4ee3\u7801\uff1a<\/span><\/p>\n<\/li>\n<\/ul>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"java\"><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">import<\/span> java.util.concurrent.locks.ReadWriteLock;<\/span><\/code><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">import<\/span> java.util.concurrent.locks.ReentrantReadWriteLock;<\/span><\/code><code><span class=\"code-snippet_outer\"><\/span><\/code><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__class\"><span class=\"code-snippet__keyword\">class<\/span> <span class=\"code-snippet__title\">SharedDataStructure<\/span> <\/span>{<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">private<\/span> <span class=\"code-snippet__keyword\">final<\/span> ReadWriteLock rwLock = <span class=\"code-snippet__keyword\">new<\/span> ReentrantReadWriteLock();<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">private<\/span> <span class=\"code-snippet__keyword\">final<\/span> Lock readLock = rwLock.readLock();<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">private<\/span> <span class=\"code-snippet__keyword\">final<\/span> Lock writeLock = rwLock.writeLock();<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">private<\/span> <span class=\"code-snippet__keyword\">int<\/span> data = <span class=\"code-snippet__number\">0<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">    <\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__function\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__keyword\">void<\/span> <span class=\"code-snippet__title\">writeData<\/span><span class=\"code-snippet__params\">(<span class=\"code-snippet__keyword\">int<\/span> newData)<\/span> <\/span>{<\/span><\/code><code><span class=\"code-snippet_outer\">        writeLock.lock();<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            data = newData;<\/span><\/code><code><span class=\"code-snippet_outer\">        } <span class=\"code-snippet__keyword\">finally<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            writeLock.unlock();<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">    <\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__function\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__keyword\">int<\/span> <span class=\"code-snippet__title\">readData<\/span><span class=\"code-snippet__params\">()<\/span> <\/span>{<\/span><\/code><code><span class=\"code-snippet_outer\">        readLock.lock();<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">return<\/span> data;<\/span><\/code><code><span class=\"code-snippet_outer\">        } <span class=\"code-snippet__keyword\">finally<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            readLock.unlock();<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">}<\/span><\/code><\/pre>\n<\/section>\n<p data-v-md-line=\"84\" style=\"box-sizing: inherit;line-height: 1.7;margin-top: 16px;margin-bottom: 16px;\"><strong><span style=\"font-size: 18px;\">4\u3001\u4e50\u89c2\u9501\/Optimistic Locks\u548c\u60b2\u89c2\u9501\/Pessimistic Locks<\/span><\/strong><\/p>\n<p style=\"box-sizing: inherit;line-height: 1.7;margin-bottom: 16px;\"><strong><span style=\"font-size: 16px;\">\u4e50\u89c2\u9501\uff08Optimistic Locks\uff09<\/span><\/strong><span style=\"font-size: 16px;\"><\/span><\/p>\n<p data-v-md-line=\"5\" style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u4e50\u89c2\u9501\u5047\u8bbe\u591a\u4e2a\u4e8b\u52a1\u540c\u65f6\u5bf9\u540c\u4e00\u6761\u8bb0\u5f55\u8fdb\u884c\u7f16\u8f91\u7684\u51e0\u7387\u5f88\u4f4e\uff0c\u56e0\u6b64\u5b83\u4e0d\u4f1a\u7acb\u5373\u9501\u5b9a\u6570\u636e\u3002\u76f8\u53cd\uff0c\u5f53\u4e8b\u52a1\u63d0\u4ea4\u65f6\uff0c\u901a\u8fc7\u6bd4\u8f83\u6570\u636e\u7248\u672c\u6765\u68c0\u67e5\u5728\u8bfb\u53d6\u6570\u636e\u540e\u662f\u5426\u6709\u5176\u4ed6\u4e8b\u52a1\u8fdb\u884c\u4e86\u4fee\u6539\u3002<\/span><\/p>\n<p data-v-md-line=\"7\" style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">Java\u4e2d\u901a\u5e38\u4f7f\u7528\u7248\u672c\u53f7\u6216\u65f6\u95f4\u6233\u5b57\u6bb5\u6765\u5b9e\u73b0\u4e50\u89c2\u9501\u3002\u4f8b\u5982\uff0c\u5728JPA\u4e2d\uff0c\u4f60\u53ef\u4ee5\u4f7f\u7528@Version\u6ce8\u89e3\u6765\u6807\u8bb0\u4e00\u4e2a\u5b57\u6bb5\u4f5c\u4e3a\u7248\u672c\u63a7\u5236\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"kotlin\"><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">import<\/span> javax.persistence.Entity;<\/span><\/code><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">import<\/span> javax.persistence.Id;<\/span><\/code><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">import<\/span> javax.persistence.Version;<\/span><\/code><code><span class=\"code-snippet_outer\"><\/span><\/code><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__meta\">@Entity<\/span><\/span><\/code><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__class\"><span class=\"code-snippet__keyword\">class<\/span> <span class=\"code-snippet__title\">ExampleEntity<\/span> <\/span>{<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__meta\">@Id<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">private<\/span> <span class=\"code-snippet__built_in\">Long<\/span> id;<\/span><\/code><code><span class=\"code-snippet_outer\">    <\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__meta\">@Version<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">private<\/span> Integer version;<\/span><\/code><code><span class=\"code-snippet_outer\"><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__comment\">\/\/ getters and setters ...<\/span><\/span><\/code><code><span class=\"code-snippet_outer\">}<\/span><\/code><\/pre>\n<\/section>\n<section style=\"box-sizing: inherit;line-height: 1.7;margin-bottom: 8px;\"><span style=\"font-size: 16px;\">\u5f53\u66f4\u65b0\u8fd9\u4e2a\u5b9e\u4f53\u65f6\uff0cJPA\u63d0\u4f9b\u8005\u4f1a\u68c0\u67e5\u6570\u636e\u5e93\u4e2d\u7684\u7248\u672c\u53f7\u662f\u5426\u4e0e\u5b9e\u4f53\u4e2d\u7684\u7248\u672c\u53f7\u5339\u914d\uff0c\u5982\u679c\u4e0d\u5339\u914d\uff0c\u5219\u629b\u51faOptimisticLockException\u5f02\u5e38\u3002<\/span><\/section>\n<p style=\"box-sizing: inherit;line-height: 1.7;margin-top: 16px;margin-bottom: 16px;\"><strong><span style=\"font-size: 16px;\">\u60b2\u89c2\u9501\uff08Pessimistic Locks\uff09<\/span><\/strong><span style=\"font-size: 16px;\"><\/span><\/p>\n<section style=\"box-sizing: inherit;line-height: 1.7;margin-bottom: 8px;\"><span style=\"font-size: 16px;\">\u60b2\u89c2\u9501\u8ba4\u4e3a\u51b2\u7a81\u662f\u5e38\u89c1\u7684\uff0c\u5e76\u4e14\u603b\u662f\u5047\u8bbe\u6700\u574f\u60c5\u51b5\u2014\u2014\u5728\u8bbf\u95ee\u6570\u636e\u524d\uff0c\u5b83\u4f1a\u9501\u5b9a\u6570\u636e\u4ee5\u9632\u6b62\u5176\u4ed6\u4e8b\u52a1\u4fee\u6539\u3002<\/span><\/section>\n<section style=\"box-sizing: inherit;line-height: 1.7;margin-bottom: 0px;\"><span style=\"font-size: 16px;\">\u5728JPA\u4e2d\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u67e5\u8be2\u63d0\u793a\u6765\u6307\u5b9a\u60b2\u89c2\u9501\u6a21\u5f0f\u3002\u4f8b\u5982\uff0c\u83b7\u53d6\u4e00\u4e2a\u6392\u4ed6\u7684\u60b2\u89c2\u9501\uff1a<\/span><\/section>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"swift\"><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">import<\/span> javax.persistence.LockModeType;<\/span><\/code><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">import<\/span> javax.persistence.EntityManager;<\/span><\/code><code><span class=\"code-snippet_outer\"><\/span><\/code><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__type\">ExampleEntity<\/span> entity = entityManager.<span class=\"code-snippet__built_in\">find<\/span>(<span class=\"code-snippet__type\">ExampleEntity<\/span>.<span class=\"code-snippet__keyword\">class<\/span>, entityId, <span class=\"code-snippet__type\">LockModeType<\/span>.<span class=\"code-snippet__type\">PESSIMISTIC_WRITE<\/span>);<\/span><\/code><\/pre>\n<\/section>\n<p data-v-md-line=\"84\" style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u5f53\u4f7f\u7528PESSIMISTIC_WRITE\u65f6\uff0cJPA\u5c06\u4f7f\u7528\u76f8\u5e94\u7684\u6570\u636e\u5e93\u9501\uff0c\u5982SQL\u7684SELECT FOR UPDATE\u8bed\u53e5\uff0c\u76f4\u5230\u5f53\u524d\u4e8b\u52a1\u5b8c\u6210\u540e\u624d\u91ca\u653e\u9501\u3002<\/span><\/p>\n<p style=\"box-sizing: inherit;line-height: 1.7;margin-top: 16px;margin-bottom: 8px;\"><strong><span style=\"font-size: 16px;\">\u603b\u7ed3<\/span><\/strong><\/p>\n<ul data-v-md-line=\"85\" style=\"box-sizing: inherit;line-height: 1.7;\" class=\"list-paddingleft-1\">\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u8fd9\u4e9b\u4e0d\u662fJava\u8bed\u8a00\u7ed3\u6784\uff0c\u800c\u662f\u57fa\u4e8e\u4e0d\u540c\u7b56\u7565\u5b9e\u73b0\u9501\u673a\u5236\u7684\u6982\u5ff5\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u4e50\u89c2\u9501\u901a\u5e38\u7528\u5728\u6ca1\u6709\u4e25\u683c\u540c\u6b65\u8981\u6c42\u7684\u573a\u666f\u4e2d\uff0c\u5e76\u5047\u8bbe\u51b2\u7a81\u5f88\u5c11\u53d1\u751f\u3002\u5e38\u89c1\u7684\u5b9e\u73b0\u65b9\u5f0f\u6709\u7248\u672c\u53f7\u7b49\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u60b2\u89c2\u9501\u5047\u8bbe\u51b2\u7a81\u5f88\u5e38\u89c1\uff0c\u56e0\u6b64\u603b\u662f\u5148\u52a0\u9501\u3002\u6570\u636e\u5e93\u4e8b\u52a1\u4e2d\u7684\u9501\u673a\u5236\u5c31\u662f\u4e00\u4e2a\u4f8b\u5b50\u3002<\/span><\/p>\n<\/li>\n<\/ul>\n<p data-v-md-line=\"89\" style=\"box-sizing: inherit;line-height: 1.7;margin-top: 16px;margin-bottom: 16px;\"><strong><span style=\"font-size: 18px;\">5\u3001\u6761\u4ef6\u9501 (Condition Locks)\uff1a<\/span><\/strong><\/p>\n<ul data-v-md-line=\"90\" style=\"box-sizing: inherit;line-height: 1.7;\" class=\"list-paddingleft-1\">\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u6761\u4ef6\u9501\u5141\u8bb8\u7ebf\u7a0b\u4e4b\u95f4\u6709\u66f4\u7ec6\u7c92\u5ea6\u7684\u534f\u4f5c\u3002\u4e0eReentrantLock\u4e00\u8d77\u4f7f\u7528\uff0c\u4e00\u4e2a\u9501\u53ef\u4ee5\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u6761\u4ef6\u5bf9\u8c61\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u8fd9\u4e9b\u6761\u4ef6\u5bf9\u8c61\u53ef\u4ee5\u63a7\u5236\u7ebf\u7a0b\u5728\u67d0\u4e2a\u7279\u5b9a\u72b6\u6001\u4e0b\u6682\u505c\u6267\u884c(await)\uff0c\u76f4\u5230\u53e6\u4e00\u4e2a\u7ebf\u7a0b\u5728\u8be5\u6761\u4ef6\u4e0a\u53d1\u9001\u4fe1\u53f7(signal)\u6216\u5e7f\u64ad(signalAll)\u540e\u624d\u7ee7\u7eed\u6267\u884c\u3002<\/span><\/p>\n<\/li>\n<li style=\"box-sizing: inherit;line-height: 1.7;\">\n<p style=\"box-sizing: inherit;line-height: 1.7;\"><span style=\"font-size: 16px;\">\u793a\u4f8b\u4ee3\u7801\uff1a<\/span><\/p>\n<\/li>\n<\/ul>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"cs\"><code><span class=\"code-snippet_outer\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__keyword\">class<\/span> <span class=\"code-snippet__title\">BoundedBuffer<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">    final Lock <span class=\"code-snippet__keyword\">lock<\/span> = <span class=\"code-snippet__keyword\">new<\/span> ReentrantLock();<\/span><\/code><code><span class=\"code-snippet_outer\">    final Condition notFull  = <span class=\"code-snippet__keyword\">lock<\/span>.newCondition(); <\/span><\/code><code><span class=\"code-snippet_outer\">    final Condition notEmpty = <span class=\"code-snippet__keyword\">lock<\/span>.newCondition(); <\/span><\/code><code><span class=\"code-snippet_outer\"><\/span><\/code><code><span class=\"code-snippet_outer\">    final Object[] items = <span class=\"code-snippet__keyword\">new<\/span> Object[<span class=\"code-snippet__number\">100<\/span>];<\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__keyword\">int<\/span> putptr, takeptr, count;<\/span><\/code><code><span class=\"code-snippet_outer\"><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__function\"><span class=\"code-snippet__keyword\">public<\/span> <span class=\"code-snippet__keyword\">void<\/span> <span class=\"code-snippet__title\">put<\/span>(<span class=\"code-snippet__params\">Object x<\/span>) throws InterruptedException<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">lock<\/span>.<span class=\"code-snippet__keyword\">lock<\/span>();<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">while<\/span> (count == items.length)<\/span><\/code><code><span class=\"code-snippet_outer\">                notFull.<span class=\"code-snippet__keyword\">await<\/span>();<\/span><\/code><code><span class=\"code-snippet_outer\">            items[putptr] = x;<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">if<\/span> (++putptr == items.length) putptr = <span class=\"code-snippet__number\">0<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">            ++count;<\/span><\/code><code><span class=\"code-snippet_outer\">            notEmpty.signal();<\/span><\/code><code><span class=\"code-snippet_outer\">        } <span class=\"code-snippet__keyword\">finally<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">lock<\/span>.unlock();<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\"><\/span><\/code><code><span class=\"code-snippet_outer\">    <span class=\"code-snippet__function\"><span class=\"code-snippet__keyword\">public<\/span> Object <span class=\"code-snippet__title\">take<\/span>(<span class=\"code-snippet__params\"><\/span>) throws InterruptedException<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">lock<\/span>.<span class=\"code-snippet__keyword\">lock<\/span>();<\/span><\/code><code><span class=\"code-snippet_outer\">        <span class=\"code-snippet__keyword\">try<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">while<\/span> (count == <span class=\"code-snippet__number\">0<\/span>)<\/span><\/code><code><span class=\"code-snippet_outer\">                notEmpty.<span class=\"code-snippet__keyword\">await<\/span>();<\/span><\/code><code><span class=\"code-snippet_outer\">            Object x = items[takeptr];<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">if<\/span> (++takeptr == items.length) takeptr = <span class=\"code-snippet__number\">0<\/span>;<\/span><\/code><code><span class=\"code-snippet_outer\">            --count;<\/span><\/code><code><span class=\"code-snippet_outer\">            notFull.signal();<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">return<\/span> x;<\/span><\/code><code><span class=\"code-snippet_outer\">        } <span class=\"code-snippet__keyword\">finally<\/span> {<\/span><\/code><code><span class=\"code-snippet_outer\">            <span class=\"code-snippet__keyword\">lock<\/span>.unlock();<\/span><\/code><code><span class=\"code-snippet_outer\">        }<\/span><\/code><code><span class=\"code-snippet_outer\">    }<\/span><\/code><code><span class=\"code-snippet_outer\">}<\/span><\/code><\/pre>\n<\/section>\n<p style=\"display: none;\"><mp-style-type data-value=\"3\"><\/mp-style-type><\/p>\n<blockquote>\n<p>\u672c\u7bc7\u6587\u7ae0\u6765\u6e90\u4e8e\u5fae\u4fe1\u516c\u4f17\u53f7:                 \u4e92\u8054\u7f51\u9762\u8bd5\u5c0f\u5e2e\u624b              <\/p>\n<\/blockquote>\n<\/div>\n","raw":"","protected":false},"excerpt":{"rendered":"<p>\u5728\u8ba1\u7b97\u673a\u79d1\u5b66\u4e2d\uff0c\u9501\u662f\u4e00\u79cd\u540c\u6b65\u673a\u5236\uff0c\u7528\u4e8e\u63a7\u5236\u591a\u4e2a\u7ebf\u7a0b\u6216\u8fdb\u7a0b\u5bf9\u5171\u4eab\u8d44\u6e90\uff08\u5982\u6570\u636e\uff09\u7684\u8bbf\u95ee\uff0c\u4ee5\u9632\u6b62\u6570\u636e\u7ade\u6001\u548c\u786e\u4fdd\u6570\u636e\u4e00\u81f4\u6027\u3002\u5728Java\u4e2d\uff0c &#8230;<\/p>\n","protected":false},"author":1,"featured_media":4024,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[30],"tags":[],"class_list":["post-4027","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-30"],"post_thumbnail_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2024\/05\/20240524144605844-150x150.jpeg","content_first_image":null,"post_medium_image_300":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2024\/05\/20240524144605844-300x128.jpeg","post_thumbnail_image_624":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2024\/05\/20240524144605844-1024x437.jpeg","post_frist_image":null,"post_medium_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2024\/05\/20240524144605844-300x128.jpeg","post_large_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2024\/05\/20240524144605844-1024x437.jpeg","post_full_image":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2024\/05\/20240524144605844.jpeg","post_all_images":[],"videoAdId":"","listAd":"0","listAdId":"","listAdEvery":6,"total_comments":0,"category_name":"\u9762\u8bd5","post_date":"2024-05-04","like_count":"0","praiseWord":"\u9f13\u52b1","copyright_state":"","excitationAd":"0","rewardedVideoAdId":"","detailAdId":"","detailAd":"0","enterpriseMinapp":"0","audios":[],"postImageUrl":"https:\/\/wp-moto-1258805347.cos.ap-shanghai.myqcloud.com\/2023\/05\/20230519082947553.jpg","avatarurls":[],"related_posts":null,"pageviews":289,"next_post_id":4023,"next_post_title":"\u9762\u8bd5\u5b98\uff1aConcurrentHashMap\u5141\u8bb8\u591a\u5c11\u4e2a\u7ebf\u7a0b\u540c\u65f6\u5199\u5165\uff1f","previous_post_id":4031,"previous_post_title":"\u9762\u8bd5\u5b98\uff1a\u4ec0\u4e48\u662f\u5f15\u7528\u8ba1\u6570\u7b97\u6cd5\uff1f\u4e3a\u4ec0\u4e48Java\u4e0d\u4f7f\u7528\uff1f","_links":{"self":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/posts\/4027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/comments?post=4027"}],"version-history":[{"count":0,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/posts\/4027\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/media\/4024"}],"wp:attachment":[{"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/media?parent=4027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/categories?post=4027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xinchewhd.com.cn\/index.php\/wp-json\/wp\/v2\/tags?post=4027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}