redission YYDS

<section class="mp_profile_iframe_wrp" style="visibility: visible;"><mp-common-profile class="js_uneditable custom_select_card mp_profile_iframe js_wx_tap_highlight" data-pluginname="mpprofile" data-weui-theme="light" data-id="Mzg4MzA1MzI4Mw==" data-headimg="http://mmbiz.qpic.cn/sz_mmbiz_png/zJJ31Zu16Uf7vH1N9Gx2MUAsDiaLTBgWZzVHeLAKiaU2ibC9K6JpssVD8YWicHdUYh8XOEicNNxzovu6JUj05WF2h8Q/0?wx_fmt=png" data-nickname="李哥说架构" data-alias="" data-signature="个人提升架,架构知识分享。" data-from="0" data-is_biz_ban="0" data-origin_num="29" data-isban="0" data-biz_account_status="0" style="visibility: visible;" data-index="0"></mp-common-profile></section><p style="margin-bottom: 0px; visibility: visible;">每天分享一个架构知识</p><p style="margin-bottom: 0px; visibility: visible;"><span style="letter-spacing: 0.578px; visibility: visible;"></span><span style="color: rgb(55, 65, 81); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; letter-spacing: normal; text-align: start; white-space: pre-wrap; background-color: rgb(247, 247, 248); visibility: visible;">Redission 是一个基于 Redis 的分布式 Java 锁框架,它提供了各种锁实现,包括可重入锁、公平锁、读写锁等。使用 Redission 可以方便地实现分布式锁。</span></p><p style="margin-bottom: 0px; visibility: visible;"><span style="color: rgb(55, 65, 81); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; letter-spacing: normal; text-align: start; white-space: pre-wrap; background-color: rgb(247, 247, 248); visibility: visible;"><span style="color: rgb(52, 53, 65); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; letter-spacing: normal; text-align: start; white-space: pre-wrap; visibility: visible;">redisson 实现公平锁 和读写锁的代码</span></span></p><ol style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;" class="list-paddingleft-1"><li style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;"><p style="visibility: visible;">公平锁:</p></li></ol><pre style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;"><div style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;"><p style="visibility: visible;"><span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">java</span><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg" style="visibility: visible;"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" style="visibility: visible;"></path><rect x="8" y="2" width="8" height="4" rx="1" ry="1" style="visibility: visible;"></rect></svg>Copy code</p><p style="visibility: visible;"><code style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;"><span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">import</span> org.redisson.Redisson;<br style="visibility: visible;"><span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">import</span> org.redisson.api.RLock;<br style="visibility: visible;"><span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">import</span> org.redisson.api.RedissonClient;<br style="visibility: visible;"><span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">import</span> org.redisson.config.Config;<br style="visibility: visible;"><br style="visibility: visible;"><span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">public</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">class</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">FairLockExample</span> {<br style="visibility: visible;"> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">public</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">static</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">void</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">main</span><span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">(String[] args)</span> {<br style="visibility: visible;"> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">// 创建 Redisson 客户端</span><br style="visibility: visible;"> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">Config</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">config</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">=</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">new</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">Config</span>();<br style="visibility: visible;"> config.useSingleServer().setAddress(<span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">"redis://127.0.0.1:6379"</span>);<br style="visibility: visible;"> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">RedissonClient</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">redissonClient</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">=</span> Redisson.create(config);<br style="visibility: visible;"><br style="visibility: visible;"> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">// 获取公平锁实例</span><br style="visibility: visible;"> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">RLock</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">fairLock</span> <span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">=</span> redissonClient.getFairLock(<span style="border-width: 0px; border-style: solid; border-color: rgb(217, 217, 227); visibility: visible;">"myFairLock"</span>);<br style="visibility: visible;">
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">try</span> {
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 加锁</span>
fairLock.lock();

<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 在这里执行需要保护的代码块</span>

} <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">finally</span> {
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 释放锁</span>
fairLock.unlock();
}

<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 关闭 Redisson 客户端</span>
redissonClient.shutdown();
}
}</code></p></div></pre><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">在上面的示例中,我们使用 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">redissonClient.getFairLock("myFairLock")</code> 方法获取一个公平锁实例。然后,在 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">try</code> 块中使用 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">fairLock.lock()</code> 方法对锁进行加锁操作,然后在需要保护的代码块中执行相应的逻辑。最后,在 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">finally</code> 块中使用 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">fairLock.unlock()</code> 方法释放锁。</p><ol start="2" style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>读写锁:</p></li></ol><pre style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><div style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p><span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">java</span><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect x="8" y="2" width="8" height="4" rx="1" ry="1"></rect></svg>Copy code</p><p><code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">import</span> org.redisson.Redisson;
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">import</span> org.redisson.api.RReadWriteLock;
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">import</span> org.redisson.api.RLock;
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">import</span> org.redisson.api.RedissonClient;
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">import</span> org.redisson.config.Config;

<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">public</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">class</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">ReadWriteLockExample</span> {
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">public</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">static</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">void</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">main</span><span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">(String[] args)</span> {
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 创建 Redisson 客户端</span>
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">Config</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">config</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">=</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">new</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">Config</span>();
config.useSingleServer().setAddress(<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">"redis://127.0.0.1:6379"</span>);
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">RedissonClient</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">redissonClient</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">=</span> Redisson.create(config);

<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 获取读写锁实例</span>
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">RReadWriteLock</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">readWriteLock</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">=</span> redissonClient.getReadWriteLock(<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">"myReadWriteLock"</span>);

<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">try</span> {
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 获取读锁</span>
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">RLock</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">readLock</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">=</span> readWriteLock.readLock();
readLock.lock();

<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 在这里执行需要保护的读操作</span>

<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 获取写锁</span>
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">RLock</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">writeLock</span> <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">=</span> readWriteLock.writeLock();
writeLock.lock();

<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 在这里执行需要保护的写操作</span>

} <span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">finally</span> {
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 释放读锁</span>
readLock.unlock();
<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 释放写锁</span>
writeLock.unlock();
}

<span style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">// 关闭 Redisson 客户端</span>
redissonClient.shutdown();
}
}</code></p></div></pre><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">在上面的示例中,我们使用 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">redissonClient.getReadWriteLock("myReadWriteLock")</code> 方法获取一个读写锁实例。然后,在 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">try</code> 块中首先获取读锁,并使用 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">readLock.lock()</code> 方法对读锁进行加锁操作,在需要保护的读操作代码块中执行相应的逻辑。然后,获取写锁,并使用 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">writeLock.lock()</code> 方法对写锁进行加锁操作,在需要保护的写操作代码块中执行相应的逻辑。最后,在 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">finally</code> 块中分别使用 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">readLock.unlock()</code> 和 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">writeLock.unlock()</code> 方法释放读锁和写锁。</p><p style="margin-bottom: 0px;"><span style="color: rgb(55, 65, 81);font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size: 16px;letter-spacing: normal;text-align: start;white-space: pre-wrap;background-color: rgb(247, 247, 248);"><span style="color: rgb(52, 53, 65);font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size: 16px;letter-spacing: normal;text-align: start;white-space: pre-wrap;">但是他们是如何实现的呢?</span></span></p><ol style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">公平锁原理:</p></li><ul style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>Redisson 的公平锁实现是基于 Redis 的单线程特性。当多个线程尝试获取公平锁时,它们将按照请求的顺序排队。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>Redisson 使用 Redis 的命令 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">SETNX</code> 来实现公平锁。每个请求都会尝试在 Redis 中设置一个键,如果设置成功,则表示获取到了锁;如果设置失败,则表示锁已被其他请求占用。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>当一个线程成功获取到公平锁后,它将持有该锁直到释放。</p></li></ul><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">读写锁原理:</p></li><ul style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>Redisson 的读写锁是通过 Redis 的单线程特性和 Redis 的 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">WATCH</code>、<code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">MULTI</code>、<code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">EXEC</code> 命令实现的。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>Redisson 使用一个 Redis 键来表示读写锁,该键存储了读锁和写锁的状态。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>当一个线程尝试获取读锁时,它会检查写锁是否已被占用,如果没有写锁,则该线程可以获取到读锁;如果有写锁,则需要等待写锁被释放。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>当一个线程尝试获取写锁时,它会先检查是否有任何线程持有读锁或写锁,如果有,则需要等待锁被释放;如果没有,则可以获取到写锁。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>Redisson 使用 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">WATCH</code> 命令来监视读写锁的状态,在获取锁之前,通过 <code style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">WATCH</code> 命令来监视读写锁的变化,如果读写锁的状态在获取锁期间发生了变化,则事务将自动失败。</p></li></ul></ol><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">总的来说,Redisson 实现公平锁和读写锁的原理都是基于 Redis 提供的原子性操作和分布式锁机制。它使用 Redis 的命令和特性来确保锁的正确获取和释放,并通过 Redisson 的客户端实现封装了这些操作,使得开发者可以更方便地使用公平锁和读写锁来进行并发控制。</p><p style="margin-bottom: 0px;"><span style="color: rgb(55, 65, 81);font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size: 16px;letter-spacing: normal;text-align: start;white-space: pre-wrap;background-color: rgb(247, 247, 248);"><span style="color: rgb(52, 53, 65);font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size: 16px;letter-spacing: normal;text-align: start;white-space: pre-wrap;">Redisson 公平锁和读写锁的使用场景</span></span></p><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">公平锁的使用场景:</p><ol style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>任务调度:当多个线程或多个节点需要按照请求的顺序依次执行任务时,可以使用公平锁来确保任务按照请求的顺序进行处理,避免出现并发冲突或数据不一致的问题。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>资源竞争:当多个线程或多个节点需要竞争有限的资源时,可以使用公平锁来实现公平的资源分配,确保每个请求都有机会获取到资源,避免某些请求长时间占用资源而导致其他请求等待过久。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>排他操作:当某个操作需要在多个线程或多个节点之间进行排他性操作时,可以使用公平锁来确保每次只有一个线程或一个节点能够执行该操作,避免并发冲突和数据不一致的问题。</p></li></ol><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">读写锁的使用场景:</p><ol style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>缓存更新:当多个线程或多个节点需要读取缓存数据,并在数据更新时进行写操作时,可以使用读写锁来保证在写操作期间其他线程或节点无法读取数据,避免读取到过期或不一致的数据。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>数据库访问:当多个线程或多个节点需要对数据库进行读写操作时,可以使用读写锁来实现读写分离,读操作可以并发进行,写操作则需要互斥执行,避免读写冲突和数据不一致的问题。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p>文件操作:当多个线程或多个节点需要对文件进行读写操作时,可以使用读写锁来实现读写分离,多个线程可以并发读取文件内容,写操作则需要互斥执行,确保文件数据的一致性。</p></li></ol><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">这些场景只是公平锁和读写锁的一部分应用示例,实际上,公平锁和读写锁在许多需要并发控制的场景中都可以发挥作用。具体使用哪种锁取决于业务需求和并发访问模式。</p><p style="margin-bottom: 0px;">我创建了一个知识星球,专门讨论架构内容,有任何架构方面的问题都可以直接向我提问。</p><p style="text-align: center;margin-bottom: 0px;"><img class="rich_pages wxw-img js_insertlocalimg js_img_placeholder wx_img_placeholder" data-ratio="1.1074074074074074" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_jpg/zJJ31Zu16UeBc6vDJpc3y7bNUB91HEglibjLzIlPfBdBHRHYpZyFc0cPRB3DOdJot9tzCFseff5RY19OrvO9Bkw/640?wx_fmt=jpeg" data-type="jpeg" data-w="1080" style="width: 677px !important; height: 749.715px !important;" data-index="1" src="https://upload-images.jianshu.io/upload_images/11186073-466a36de9319fb6b.png" _width="677px" crossorigin="anonymous" alt="图片"></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p><blockquote><p>本文使用 <a href="https://www.jianshu.com/p/5709df6fb58d" class="internal">文章同步助手</a> 同步</p></blockquote>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容