更新时间:2023年05月25日09时45分 来源:传智教育 浏览次数:
是的,ReadWriteLock(读写锁)提供了读写之间的互斥。它是一种并发控制机制,允许多个线程同时读取共享数据,但只允许一个线程写入共享数据。
下面是一个Java代码演示,展示了ReadWriteLock的使用来实现读写互斥:
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++; // 修改共享数据 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(); } }
在上面的示例中,有一个共享的数据变量sharedData,一个写线程和一个读线程。写线程通过获取写锁来修改共享数据,而读线程通过获取读锁来读取共享数据。
运行上述代码后,你会看到写线程定期地更新共享数据,并打印出更新后的值,而读线程会定期地读取共享数据并打印出当前的值。由于使用了ReadWriteLock,读写操作是互斥的,即在写操作进行时,读操作将被阻塞,直到写操作完成。这保证了数据的一致性和正确性。
笔者以上只是做了一个简单的演示,实际使用ReadWriteLock可能涉及更复杂的逻辑和多个读写线程。