ReadWriteLock读写锁

本文通过一个简单示例介绍了ReadWriteLock的基本用法。ReadWriteLock提供了一种读写锁机制,允许多个读操作同时进行但写操作独占资源。通过具体代码演示了如何在多线程环境下实现读写操作的互斥和非互斥。

ReadWriteLock维护了一对锁,读锁可允许多个读线程并发使用,写锁是独占的。

下面通过一个简单的例子来了解ReadWriteLock。

 1 package com.ccfdod.juc;
 2 
 3 import java.util.concurrent.locks.ReadWriteLock;
 4 import java.util.concurrent.locks.ReentrantReadWriteLock;
 5 
 6 /**
 7  * 写写/读写,需要互斥
 8  * 读读,不需要互斥
 9  */
10 public class TestReadWriteLock {
11 
12     public static void main(String[] args) {
13         ReadWriteLockDemo rw = new ReadWriteLockDemo();
14         new Thread(new Runnable() {
15 
16             @Override
17             public void run() {
18                 rw.set((int) (Math.random() * 101));
19             }
20             
21         }, "Write:").start();
22         
23         for (int i = 0; i < 100; i++) {
24             new Thread(new Runnable() {
25 
26                 @Override
27                 public void run() {
28                     rw.get();
29                 }
30                 
31             }, "Read:").start();
32         }
33     }
34 }
35 
36 class ReadWriteLockDemo {
37     
38     private int number = 0;
39     
40     private ReadWriteLock lock = new ReentrantReadWriteLock();
41     
42     //
43     public void get() {
44         lock.readLock().lock();    //上锁
45         try {
46             System.out.println(Thread.currentThread().getName() + " : " + number);
47         } finally {
48             lock.readLock().unlock();    //释放锁
49         }
50     }
51     
52     //
53     public void set(int number) {
54         lock.writeLock().lock();    //上锁
55         try {
56             System.out.println(Thread.currentThread().getName());
57             this.number = number;
58         } finally {
59             lock.writeLock().unlock();    //释放锁
60         }
61     }
62 }

 

转载于:https://www.cnblogs.com/ccfdod/p/6417655.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值