Skip to content

Commit 00bc8ba

Browse files
committed
完成ReentrantReadWriteLock
1 parent a74df9a commit 00bc8ba

File tree

6 files changed

+113
-5
lines changed

6 files changed

+113
-5
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.concurrency.ConcurrentHashMap;
2+
3+
import java.util.concurrent.ConcurrentHashMap;
4+
5+
public class ConcurrentHashMapTest {
6+
private ConcurrentHashMap maps = new ConcurrentHashMap();
7+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.concurrency.ReentrantReadWriteLock;
2+
3+
import java.util.concurrent.locks.ReadWriteLock;
4+
import java.util.concurrent.locks.ReentrantReadWriteLock;
5+
6+
public class PricesInfo {
7+
private double price1;
8+
private double price2;
9+
10+
private ReadWriteLock lock;
11+
12+
public PricesInfo(){
13+
price1 = 1.0;
14+
price2 = 2.0;
15+
16+
lock = new ReentrantReadWriteLock();
17+
}
18+
19+
public double getPrice1(){
20+
lock.readLock().lock();
21+
double value = price1;
22+
lock.readLock().unlock();
23+
return value;
24+
}
25+
26+
public double getPrice2(){
27+
lock.readLock().lock();
28+
double value = price2;
29+
lock.readLock().unlock();
30+
return value;
31+
}
32+
33+
public void setPrices(double price1, double price2){
34+
lock.writeLock().lock();
35+
this.price1 = price1;
36+
this.price2 = price2;
37+
lock.writeLock().unlock();
38+
}
39+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.concurrency.ReentrantReadWriteLock;
2+
3+
public class Reader implements Runnable{
4+
5+
private PricesInfo pricesInfo;
6+
7+
public Reader(PricesInfo pricesInfo){
8+
this.pricesInfo = pricesInfo;
9+
}
10+
11+
@Override
12+
public void run() {
13+
for (int i = 0; i < 10; i++) {
14+
System.out.println(Thread.currentThread().getName() + "--Price 1:" + pricesInfo.getPrice1());
15+
System.out.println(Thread.currentThread().getName() + "--Price 1:" + pricesInfo.getPrice2());
16+
}
17+
}
18+
19+
}

javaConcurrency/src/com/concurrency/ReentrantReadWriteLock/TEst.java

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.concurrency.ReentrantReadWriteLock;
2+
3+
public class Test {
4+
public static void main(String[] args) {
5+
PricesInfo pricesInfo = new PricesInfo();
6+
7+
Reader[] readers = new Reader[5];
8+
Thread[] readerThread = new Thread[5];
9+
for (int i=0; i<5; i++){
10+
readers[i]=new Reader(pricesInfo);
11+
readerThread[i]=new Thread(readers[i]);
12+
}
13+
14+
Writer writer=new Writer(pricesInfo);
15+
Thread threadWriter=new Thread(writer);
16+
17+
for (int i=0; i<5; i++){
18+
readerThread[i].start();
19+
}
20+
threadWriter.start();
21+
}
22+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.concurrency.ReentrantReadWriteLock;
2+
3+
public class Writer implements Runnable{
4+
private PricesInfo pricesInfo;
5+
6+
public Writer(PricesInfo pricesInfo){
7+
this.pricesInfo = pricesInfo;
8+
}
9+
10+
@Override
11+
public void run() {
12+
for (int i=0; i<3; i++) {
13+
System.out.printf("Writer: Attempt to modify the prices.\n");
14+
pricesInfo.setPrices(Math.random()*10, Math.random()*8);
15+
System.out.printf("Writer: Prices have been modified.\n");
16+
try {
17+
Thread.sleep(2);
18+
} catch (InterruptedException e) {
19+
e.printStackTrace();
20+
}
21+
}
22+
23+
}
24+
25+
26+
}

0 commit comments

Comments
 (0)