<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## ReentrantLock獨享式重入鎖 ### 使用 ~~~ ReentrantLock takeLock = new ReentrantLock(); // 獲取鎖 takeLock.lock(); try { // 業務邏輯 } finally { // 釋放鎖 takeLock.unlock(); } ~~~ ## ReentrantReadWriteLock 讀寫分離獨享式重入鎖 因此理想的實現是: 1. 當有寫線程時,則寫線程獨占同步狀態。 2. 當沒有寫線程時只有讀線程時,則多個讀線程可以共享同步狀態。 ~~~ public class ReadWriteCache { private static Map<String, Object> data = new HashMap<>(); private static ReadWriteLock lock = new ReentrantReadWriteLock(false); private static Lock rlock = lock.readLock(); private static Lock wlock = lock.writeLock(); public static Object get(String key) { rlock.lock(); try { return data.get(key); } finally { rlock.unlock(); } } public static Object put(String key, Object value) { wlock.lock(); try { return data.put(key, value); } finally { wlock.unlock(); } } ~~~ ## Semaphore共享式不可重入鎖 ~~~ // 創建一個計數閾值為5的信號量對象 // 只能5個線程同時訪問 Semaphore semp = new Semaphore(5); try { // 申請許可 semp.acquire(); try { // 業務邏輯 } catch (Exception e) { } finally { // 釋放許可 semp.release(); } } catch (InterruptedException e) { ~~~ ## CountDownLatch計數式獨享鎖 ## Condition等待通知 1. 每當一個線程調用Condition.await()方法,那么該線程會釋放鎖,構造成一個Node節點加入到等待隊列的隊尾。 2. 每當一個線程調用Condition.signal()方法,那么該線程會等待隊列的隊尾節點移到AQS中 ### Condition原理 Condition實現等待的時候內部也有一個等待隊列,等待隊列是一個隱式的單向隊列,等待隊列中的每一個節點也是一個AbstractQueuedSynchronizer.Node實例。 每個Condition對象中保存了firstWaiter和lastWaiter作為隊列首節點和尾節點,每個節點使用Node.nextWaiter保存下一個節點的引用,因此等待隊列是一個單向隊列。 每當一個線程調用Condition.await()方法,那么該線程會釋放鎖,構造成一個Node節點加入到等待隊列的隊尾。 每當一個線程調用Condition.signal()方法,那么該線程會等待隊列的隊尾節點移到AQS中
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看