教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

ReadWriteLock讀寫之間互斥嗎?

更新時(shí)間:2023年05月29日09時(shí)43分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

  是的,ReadWriteLock(讀寫鎖)提供了讀寫操作之間的互斥。它允許多個(gè)線程同時(shí)進(jìn)行讀操作,但在寫操作期間會阻塞其他線程的讀和寫操作。

  接下來筆者通過一段具體的Java代碼,來具體演示一下ReadWriteLock讀寫互斥的原理:

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReadWriteLockDemo {
    private static final ReadWriteLock lock = new ReentrantReadWriteLock();
    private static int sharedData = 0;

    public static void main(String[] args) {
        Thread writerThread = new Thread(() -> {
            while (true) {
                lock.writeLock().lock(); // 獲取寫鎖
                try {
                    sharedData++; // 修改共享數(shù)據(jù)
                    System.out.println("Writer thread modified data: " + sharedData);
                    Thread.sleep(1000); // 模擬寫操作的耗時(shí)
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    lock.writeLock().unlock(); // 釋放寫鎖
                }
            }
        });

        Thread readerThread = new Thread(() -> {
            while (true) {
                lock.readLock().lock(); // 獲取讀鎖
                try {
                    System.out.println("Reader thread read data: " + sharedData); // 讀取共享數(shù)據(jù)
                    Thread.sleep(500); // 模擬讀操作的耗時(shí)
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    lock.readLock().unlock(); // 釋放讀鎖
                }
            }
        });

        writerThread.start();
        readerThread.start();
    }
}

  在以上示例中,有一個(gè)共享的整數(shù)變量sharedData,一個(gè)寫線程負(fù)責(zé)修改它的值,一個(gè)讀線程負(fù)責(zé)讀取它的值。

  在寫線程中,我們首先獲取寫鎖lock.writeLock().lock(),然后進(jìn)行寫操作并修改共享數(shù)據(jù),最后釋放寫鎖lock.writeLock().unlock()。

  在讀線程中,我們首先獲取讀鎖lock.readLock().lock(),然后進(jìn)行讀操作并打印共享數(shù)據(jù),最后釋放讀鎖lock.readLock().unlock()。

  讀線程和寫線程都會一直運(yùn)行,并通過鎖的機(jī)制實(shí)現(xiàn)讀寫互斥。

0 分享到:
和我們在線交談!