更新時間:2023年05月25日09時45分 來源:傳智教育 瀏覽次數(shù):
是的,ReadWriteLock(讀寫鎖)提供了讀寫之間的互斥。它是一種并發(fā)控制機制,允許多個線程同時讀取共享數(shù)據(jù),但只允許一個線程寫入共享數(shù)據(jù)。
下面是一個Java代碼演示,展示了ReadWriteLock的使用來實現(xiàn)讀寫互斥:
import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class ReadWriteLockExample { private static int sharedData = 0; private static ReadWriteLock lock = new ReentrantReadWriteLock(); public static void main(String[] args) { Thread writerThread = new Thread(() -> { while (true) { try { lock.writeLock().lock(); // 獲取寫鎖 sharedData++; // 修改共享數(shù)據(jù) System.out.println("Writer: Data updated to " + sharedData); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.writeLock().unlock(); // 釋放寫鎖 } } }); Thread readerThread = new Thread(() -> { while (true) { try { lock.readLock().lock(); // 獲取讀鎖 System.out.println("Reader: Data read as " + sharedData); Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.readLock().unlock(); // 釋放讀鎖 } } }); writerThread.start(); readerThread.start(); } }
在上面的示例中,有一個共享的數(shù)據(jù)變量sharedData,一個寫線程和一個讀線程。寫線程通過獲取寫鎖來修改共享數(shù)據(jù),而讀線程通過獲取讀鎖來讀取共享數(shù)據(jù)。
運行上述代碼后,你會看到寫線程定期地更新共享數(shù)據(jù),并打印出更新后的值,而讀線程會定期地讀取共享數(shù)據(jù)并打印出當前的值。由于使用了ReadWriteLock,讀寫操作是互斥的,即在寫操作進行時,讀操作將被阻塞,直到寫操作完成。這保證了數(shù)據(jù)的一致性和正確性。
筆者以上只是做了一個簡單的演示,實際使用ReadWriteLock可能涉及更復雜的邏輯和多個讀寫線程。