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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM