package cn.it.cast.dao;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import static java.lang.Thread.sleep;
/**
* 写写/读写,需要互斥
* 读读,不需要互斥
*/
public class TestReadWriteLock {
public static void main(String[] args) {
ReadWriteLockDemo rw = new ReadWriteLockDemo();
//读操作
Thread threadRead = new Thread(new Runnable() {
@Override
public void run() {
try {
rw.get();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread threadRead2 = new Thread(new Runnable() {
@Override
public void run() {
try {
rw.get();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread threadWrite = new Thread(new Runnable() {
@Override
public void run() {
try {
rw.set(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
threadRead.start();
threadWrite.start();
}
}
class ReadWriteLockDemo {
private int number = 0;
private ReadWriteLock lock = new ReentrantReadWriteLock();
//读
public void get() throws InterruptedException {
lock.readLock().lock(); //上锁
try {
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName() + " 我在读 ");
sleep(200);
}
} finally {
lock.readLock().unlock(); //释放锁
}
}
//写
public void set(int number) throws InterruptedException {
lock.writeLock().lock(); //上锁
try {
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName() + " 我在写 ");
this.number = number;
sleep(200);
}
} finally {
lock.writeLock().unlock(); //释放锁
}
}
}
ReadWriteLock 读写锁
猜你喜欢
转载自blog.csdn.net/m0_38054145/article/details/81987753
今日推荐
周排行