1 /**
2 /** * 独占锁(写锁)
3 一次只能被一个线程占有
4 * 共享锁(读锁) 多个线程可以同时占有
5 * * ReadWriteLock
6 * 读-读 可以共存!
7 * 读-写 不能共存!
8 * 写-写 不能共存!
9 * readWriteLock
10 */
11 public class ReadWriteLockDmoe {
12 public static void main(String[] args) {
13 MyCacheLock c = new MyCacheLock();
14 //写入
15 for (int i = 1; i <= 5; i++) {
16 int temp = i;
17 new Thread(() -> {
18 c.put(temp + "", temp + "");
19 }, String.valueOf(i)).start();
20 }
21
22 //读取
23 for (int 睿共享i = 1; i <= 5; i++) {
24 睿共享 int temp = i;
25 new Thread(() -> {
26 c.get(temp + "");
27 }, String.valueOf(i)).start();
28 }
29 }
30
31 }
32
33 /**
34 * 加锁
35 */
36 class MyCacheLock {
37 private volatile Map map = new HashMap<>();
38 ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
39
40
41 //存写 ,写入的时候只希望同时只有一个线程写
42 public void put(String key, Object value) {
43 readWriteLock.writeLock().lock();
44 try {
45 System.out.pr睿共享intln(Thread.currentThread().getName()+"写入"+key);
46 map.put(key, value);
47 System.out.println(Thread.currentThread().getName()+"写入OK!");
48 }catch (Exception e){
49 睿共享 e.printStackTrace();
50 }finally {
51 readWriteLock.writeLock().unlock();
52 }
53
54 }
55
56 //取读 所有人可以读
57 public void get(String key) {
58 readWriteLock.readLock().lock();
59 try {
60 System.out.println(Thread.currentThread().getName() + "读取" + key);
61 Object o = map.get(key);
62 System.out.println(Thread.currentThread().getName() + "读取OK");
63 } catch (Exception e) {
64 e.printStackTrace();
65 } finally {
66 readWriteLock.readLock().unlock();
67 }
68 }
69 }
70
71
72 /**
73 *
74 */
75 class MyCache {
76 private volatile Map map = new HashMap<>();
77
78 //存写
79 public void put(Stri睿共享ng key, Object value) {
80 System.out.println(Thread.currentThread().getName() + "写入" + key);
81 map.put(key, value);
82 System.out.println(Thread.currentThread().getName() + "写入OK!");
83 }
84
85 //取读
86 public void get(String key) {
87 System.out.println(Thread.currentThread().getName() + "读取" + key);
88 Object o = map.get(key);
89 System.out.println(Thread.currentThread().getName() + "读取OK");
90 }
91 }