Java中读写锁怎么用,并附上代码
时间: 2023-12-27 19:03:17 浏览: 142
java 读写锁代码
在Java中,读写锁是通过`ReentrantReadWriteLock`类实现的。这个类提供了两个锁,一个读锁和一个写锁,可以通过它们来实现对共享数据的读写操作。
下面是一个简单的示例代码,演示了如何使用读写锁来实现对共享数据的读写操作。
```java
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockDemo {
private static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
private static int count = 0;
public static void main(String[] args) {
new Thread(() -> {
while (true) {
try {
lock.writeLock().lock();
count++;
System.out.println(Thread.currentThread().getName() + " write count = " + count);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.writeLock().unlock();
}
}
}, "write-thread").start();
new Thread(() -> {
while (true) {
try {
lock.readLock().lock();
System.out.println(Thread.currentThread().getName() + " read count = " + count);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.readLock().unlock();
}
}
}, "read-thread").start();
}
}
```
在这个例子中,我们创建了一个`ReentrantReadWriteLock`对象作为共享锁,并定义了一个共享变量`count`。然后,我们创建了两个线程,一个写线程和一个读线程。写线程每隔一秒钟增加一次`count`的值,并打印出来,而读线程每隔一秒钟读取`count`的值,并打印出来。
在写线程中,我们使用`lock.writeLock().lock()`获取写锁,并在使用完共享变量后,使用`lock.writeLock().unlock()`释放写锁。而在读线程中,我们使用`lock.readLock().lock()`获取读锁,并在使用完共享变量后,使用`lock.readLock().unlock()`释放读锁。这样就可以保证多个读线程可以同时读取共享变量,而写线程需要独占锁。
需要注意的是,写锁是独占锁,在写锁被持有期间,其他线程无法获取写锁和读锁,而读锁是共享锁,在读锁被持有期间,其他线程可以同时获取读锁,但不能获取写锁。
阅读全文