更新時(shí)間:2023年05月25日09時(shí)45分 來源:傳智教育 瀏覽次數(shù):
是的,ReadWriteLock(讀寫鎖)提供了讀寫之間的互斥。它是一種并發(fā)控制機(jī)制,允許多個(gè)線程同時(shí)讀取共享數(shù)據(jù),但只允許一個(gè)線程寫入共享數(shù)據(jù)。
下面是一個(gè)Java代碼演示,展示了ReadWriteLock的使用來實(shí)現(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(); } }
在上面的示例中,有一個(gè)共享的數(shù)據(jù)變量sharedData,一個(gè)寫線程和一個(gè)讀線程。寫線程通過獲取寫鎖來修改共享數(shù)據(jù),而讀線程通過獲取讀鎖來讀取共享數(shù)據(jù)。
運(yùn)行上述代碼后,你會(huì)看到寫線程定期地更新共享數(shù)據(jù),并打印出更新后的值,而讀線程會(huì)定期地讀取共享數(shù)據(jù)并打印出當(dāng)前的值。由于使用了ReadWriteLock,讀寫操作是互斥的,即在寫操作進(jìn)行時(shí),讀操作將被阻塞,直到寫操作完成。這保證了數(shù)據(jù)的一致性和正確性。
筆者以上只是做了一個(gè)簡單的演示,實(shí)際使用ReadWriteLock可能涉及更復(fù)雜的邏輯和多個(gè)讀寫線程。
北京校區(qū)